滚动超过后修复元素

时间:2014-01-04 11:44:57

标签: jquery html fixed scrolltop exceed

我在我的文档中有五个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的偏移量,以便在某些元素离开流后获得实际偏移量

http://jsfiddle.net/6TjgY/

2 个答案:

答案 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'});
}

Try this, should get you started at least

答案 1 :(得分:-1)

您可以使用此插件将元素修复到您喜欢的位置:https://github.com/gwdhost/SnapToTop