gpt4 book ai didi

javascript - 使固定侧边栏从页面底部滚动 290px?

转载 作者:可可西里 更新时间:2023-11-01 02:27:48 26 4
gpt4 key购买 nike

我正在尝试创建一个功能类似于 Vice.com 上的边栏。如果向下滚动,侧边栏将固定在某个点,然后当侧边栏到达网站底部附近的某个点时,它将继续与网站的其余部分一起向上滚动。

在我的网站上,我卡在了第二部分,它让侧边栏在接近底部时继续向上滚动。 290px 从底部开始。

这是我目前所拥有的:

JavaScript

<script>
jQuery(window).scroll(function () {
var threshold = 20;
if (jQuery(window).scrollTop() >= 20)
jQuery('#sidebar').addClass('fixed');
else
jQuery('#sidebar').removeClass('fixed');
});
</script>

CSS

#sidebar {
margin: 0;
position: absolute;
right: 0;
width: 220px;
}
#sidebar.fixed {
margin-left: 720px;
position:fixed;
right: auto;
top: 173px;
}

如何让固定侧边栏在到达底部附近的某个点后向上滚动?


编辑#1

这是 Adam 更新后的代码。我对具有不同阈值的页面使用条件语句。当我使用此代码时没有任何反应,这意味着边栏没有添加 fixed 类,因此可以正常向上滚动,就好像代码根本不存在一样。此外,我在这一行 if (scrollTop() >= 236) { 上收到控制台错误,表示“数字不是函数”。

if (jQuery(document.body).hasClass("home")) {

jQuery(window).scroll(function () {
var sidebarHeight = jQuery('#sidebar').height(),
containerHeight = jQuery('#container').height() + 173,
scrollTop = jQuery(window).scrollTop(),
clientHeight = scrollTop + jQuery(window).height(),
threshold = 654;
if (scrollTop() >= 654) {
jQuery('#sidebar').addClass('fixed');
} else if (containerHeight - scrollTop <= sidebarHeight) {
jQuery('#sidebar').removeClass('fixed').addClass('bottom');
}
});

} else if (jQuery(document.body).hasClass("single") || jQuery(document.body).hasClass("page")) {

jQuery(window).scroll(function () {
var sidebarHeight = jQuery('#sidebar').height(),
containerHeight = jQuery('#container').height() + 173,
scrollTop = jQuery(window).scrollTop(),
clientHeight = scrollTop + jQuery(window).height(),
threshold = 20;
if (scrollTop() >= 20) {
jQuery('#sidebar').addClass('fixed');
} else if (containerHeight - scrollTop <= sidebarHeight) {
jQuery('#sidebar').removeClass('fixed').addClass('bottom');
}
});

} else {

jQuery(window).scroll(function () {
var sidebarHeight = jQuery('#sidebar').height(),
containerHeight = jQuery('#container').height() + 173,
scrollTop = jQuery(window).scrollTop(),
clientHeight = scrollTop + jQuery(window).height(),
threshold = 236;
if (scrollTop() >= 236) {
jQuery('#sidebar').addClass('fixed');
} else if (containerHeight - scrollTop <= sidebarHeight) {
jQuery('#sidebar').removeClass('fixed').addClass('bottom');
}
});

}

下面是请求的 HTML 结构:

<!-- BEGIN #masthead-->
<div id="masthead">
<!-- #secondary-menu -->
<div id="secondary-menu">

<!-- .centered-menu -->
<div class="centered-menu">
<div class="latest-tweets"></div>
<div id="search-bar"></div>
<ul class="social-icons sf-js-enabled"></ul>
</div>
<!-- /.centered-menu -->

</div>
<!-- /#secondary-menu -->

<!-- BEGIN #header-->
<div id="header">

<!-- #header-inner -->
<div id="header-inner" class="clearfix">
<div id="logo"></div>

<!-- BEGIN #primary-menu -->
<div id="primary-menu" class="clearfix">

<!-- .left-menu -->
<div class="left-menu split-menu"></div>
<!-- /.left-menu -->

<!-- .right-menu -->
<div class="right-menu split-menu">
<div class="menu-menu-right-container"></div>
<!-- /.right-menu -->

<!-- END #primary-menu -->
</div>

</div>
<!-- /#header-inner -->

<!-- END #header -->

<!-- BEGIN #mobile-menu -->
<div id="mobile-menu">
<div id="mobile-inner"></div>
</div>
<!-- END #mobile-menu -->

</div>

<div id="categories-bar"></div>

</div>
<div id="masthead-space"></div>
<!-- END #masthead -->

<!-- BEGIN #wrapper-->
<div id="wrapper">

<!-- BEGIN #page-->
<div id="page">

<div id="main" class="clearfix">

<div id="container" class="clearfix">

<!--BEGIN #content -->
<div id="content">
<div id="sidebar"></div><!-- #sidebar -->
</div>

</div>

<!--END #main -->
</div>

<!--END #page -->
</div>

<!--END #wrapper -->
</div>

<!--BEGIN #bottom -->
<div id="bottom">

<!--BEGIN #footer -->
<div id="footer"></div>

</div>

最佳答案

我的建议:

创建 2 个具有您想要的特性的 CSS 类,并在到达断点后切换两者,其中 1 个必须在开始时处于事件状态。

FIDDLE

JS

var changePoint = $('#reaching_the_top_of_this_element_activates_change').offset().top;

$(window).scroll(function () {
if ($(window).scrollTop() >= changePoint) {
$('#sidebar').removeClass('blackStatic');
$('#sidebar').addClass('redFixed');
}
else {
$('#sidebar').addClass('blackStatic');
$('#sidebar').removeClass('redFixed');
}

});

CSS

.blackStatic {
position: static;
background-color: black;
color: red;
}
.redFixed {
position: fixed;
top: 0;
background-color: red;
color: black;
}

关于javascript - 使固定侧边栏从页面底部滚动 290px?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22549028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com