【发布时间】:2017-06-12 13:33:50
【问题描述】:
我正在为一个 div 实现一个粘性行为,就像这样 当用户滚动页面时,右侧的侧边栏会向上滚动,直到接近顶部,然后在用户仍在向下滚动时停止。当用户接近页面底部时,侧边栏应该再次开始向上滚动。
当用户接近底部时会发生什么情况,我将侧边栏的位置从固定更改为绝对位置并使其跳转。
有没有办法将位置从固定更改为绝对位置,并且在我这样做时它不会跳转,而是从相同的坐标继续向上滚动?
<div class="col-md-4" style="border: 0px dashed black; margin-left: 2.933%; height: 832px; osition: relative;">
<div class="sticky" style="border: 1px dashed red;">
<div id="map" style="min-height: 350px;"></div>
<div style="padding: 20px">interesting</div>
<div style="padding: 20px">interesting</div>
<div style="padding: 20px">interesting</div>
<div style="padding: 20px">interesting</div>
<div style="padding: 20px">interesting</div>
<div id="last-interesting">last-interesting</div>
</div>
var stickyHeaderTop = $('.sticky').offset().top;
if( $(window).scrollTop() > stickyHeaderTop-10 ) {
$('.sticky').css({position: 'fixed', zoom: '1', top: '10px', left:'925px'});
} else {
$('.sticky').css({position: 'relative', zoom: '1', top: '0px', left: '0px', width:'330px'});
}
if ($('#content-last').visible(true)) {
// alert('visible');
console.log($('.sticky').offset().top);
$('.sticky').css({position: 'absolute', zoom: 'auto', 'z-index': '1', left: '', height: ''});
}
我也试过了
$('.sticky').css({position: 'absolute', top: '0' zoom: 'auto', 'z-index': '1', left: '', height: ''});
还有这个
$('.sticky').css({position: 'absolute', top: $(window).scrollTop()+'px', zoom: 'auto', 'z-index': '1', left: '', height: ''});
但第一个就像视频中一样根本没有置顶,第二个跳到屏幕中间。
知道如何解决这个问题吗?
你可以看到我在right here之后的粘性效果。
【问题讨论】:
-
position: absolute正在设置元素位置“相对于其第一个定位(非静态)祖先元素”(w3schools.com/cssref/pr_class_position.asp)所以也许让自己清楚这是如何工作的可能是一个好方法。检查所有祖先元素,找出你的.sticky相对定位的那个。 -
将 div 放在一切之外(这样
<body>是唯一的祖先)可能会奏效。 -
不直接相关,但您的 HTML 中有
osition: relative;。缺少一个“p”。 -
@Aᴍɪʀ 实际上这可能与我之前写的有关
-
不应该
if ($('#content-last').visible(true)) {是:if ($('#content-last:visible')) {?
标签: javascript jquery html css