我在我的文档中有五个div,我想在滚动div后,当它们到达特定位置(例如100px)时固定,但是只有当它们超过该位置时才会固定一些div。我尝试使用0px它是相同的东西,但问题是100px更明显 有人可以帮我解决这个问题
CSS
#f1{
width:600px;
z-index:1;
}
#f2{
width:600px;
z-index:2;
}
#f3{
width:600px;
z-index:3;
}
#f4{
width:600px;
z-index:4;
}
#f5{
width:600px;
z-index:5;
}
.fixed{
position:fixed;
top:100px;
}
JS
$( document ).ready(function() { var f1 = $('#f1').offset().top ; var f2 = $('#f2').offset().top ; var f3 = $('#f3').offset().top ; var f4 = $('#f4').offset().top ; var f5 = $('#f5').offset().top ; $(window).scroll(function (event) { var y = $(this).scrollTop()+100; if (y >= f1) { $('#f1').addClass('fixed'); } else { $('#f1').removeClass('fixed'); } if (y >= f2) { $('#f2').addClass('fixed'); } else { $('#f2').removeClass('fixed'); } if (y >= f3) { $('#f3').addClass('fixed'); } else { $('#f3').removeClass('fixed'); } if (y >= f4) { $('#f4').addClass('fixed'); } else { $('#f4').removeClass('fixed'); } if (y >= f5) { $('#f5').addClass('fixed'); } else { $('#f5').removeClass('fixed'); } }); });
HTML
<div style="width:600px; margin:0 auto; background:#ccc">
<p>
some long text here
</p>
<div id="f1" style="background:#000; color:#fff">
div 1
</div>
<p>
some long text here
</p>
<div id="f2" style="background:#000; color:#fff">
div 2
</div>
<p>
some long text here
</p>
<div id="f3" style="background:#000; color:#fff">
div 3
</div>
<p>
some long text here
</p>
<div id="f4" style="background:#000; color:#fff">
div 4
</div>
<p>
some long text here
</p>
<div id="f5" style="background:#000; color:#fff">
div 5
</div>
<p>
some long text here
</p>
</div>
您可以在此处查看结果http://jsfiddle.net/hPs6p/
我自己发现了这个问题所以谢谢大家
JS
$( document ).ready(function() { $(window).scroll(function (event) { var y = $(this).scrollTop()+100; var f1 = $('#f1').offset().top ; var f2 = $('#f2').offset().top ; var f3 = $('#f3').offset().top ; var f4 = $('#f4').offset().top ; var f5 = $('#f5').offset().top ; if (y >= f1) { $('#f1').addClass('fixed'); } else { $('#f1').removeClass('fixed'); } if (y >= f2) { $('#f2').addClass('fixed'); } else { $('#f2').removeClass('fixed'); } if (y >= f3) { $('#f3').addClass('fixed'); } else { $('#f3').removeClass('fixed'); } if (y >= f4) { $('#f4').addClass('fixed'); } else { $('#f4').removeClass('fixed'); } if (y >= f5) { $('#f5').addClass('fixed'); } else { $('#f5').removeClass('fixed'); } }); });
这个js解决问题
div1,div2,div3,div4和div 5的偏移量在触发滚动事件之前计算了一次,当div1变为固定时,它不再流动,因此对于其他div 解决方案是在滚动事件中计算div的偏移量,以便在某些元素离开流后获得实际偏移量
答案 0 :(得分:0)
您需要修复每个滚动,例如
if(scrollTop>200){
$('#header').css({ 'position': 'fixed', 'top' : '0' });
}
else{
$('#header').css({ 'position': 'relative', 'top': '200px'});
}
if(scrollTop>300){
$('#header2').css({ 'position': 'fixed', 'top' : '100px' });
}
else{
$('#header2').css({ 'position': 'relative', 'top': '400px'});
}
答案 1 :(得分:-1)
您可以使用此插件将元素修复到您喜欢的位置:https://github.com/gwdhost/SnapToTop