修复了div处滚动停止栏上的侧边栏

时间:2014-01-28 14:33:51

标签: javascript css scroll fixed

我尝试确保滚动时div“过滤器”固定,然后在“outside_footer_wrapper”时停止。使用以下脚本但无法使其工作?

jsfiddle

$(function() {
        var top = $('#filter').offset().top - parseFloat($('#filter').css('marginTop').replace(/auto/, 0));
        var footTop = $('#outside_footer_wrapper').offset().top - parseFloat($('#outside_footer_wrapper').css('marginTop').replace(/auto/, 0));

        var maxY = footTop - $('#filter').outerHeight();

        $(window).scroll(function(evt) {
            var y = $(this).scrollTop();
            if (y > top) {
                if (y < maxY) {
                    $('#filter').addClass('fixed').removeAttr('style');
                } else {
                    $('#filter').removeClass('fixed').css({
                        position: 'absolute',
                        top: (maxY - top) + 'px'
                    });
                }
            } else {
                $('#filter').removeClass('fixed');
            }
        });
    });

4 个答案:

答案 0 :(得分:0)

如果您知道必须修复过滤器的像素数以及页脚启动的像素数,您可以尝试此功能:

scrollTop

答案 1 :(得分:0)

是这样的吗?

jsfiddle

// get box div position
var box = document.getElementById('box').offsetTop;

window.onscroll = function(){

    // get current scroll position
    var scroll_top = document.body.scrollTop || document.documentElement.scrollTop;

    document.getElementById('scbox').innerText = scroll_top + ' ' + box;

    // if current scroll position >= box div position then box position fixed
    if(scroll_top >= box)
        document.getElementById('box').style.position = 'fixed';
    else
        document.getElementById('box').style.position = 'relative';


}

答案 2 :(得分:0)

试试这个:

#sidebar {
 position: fixed;
}

jsfiddle here

答案 3 :(得分:0)

如果要在到达页脚后停止position:fixed,可以使用top执行类似伪造的操作:

$(function() {
    var top = $('#filter').offset().top,
        footTop = $('#outside_footer_wrapper').offset().top,
        maxY = footTop - $('#filter').outerHeight();
    $(window).scroll(function(evt) {
        var y = $(this).scrollTop();
        if (y > top) {
            $('#filter').addClass('fixed').removeAttr('style');
            if (y > maxY-20){
             var min = y - maxY + 20;
            $('#filter').css('top','-'+min+'px');
            }
       } else {
            $('#filter').removeClass('fixed');
        }
    });
});

同样要注意CSS fixed的CSS,你需要以#filter的相同特性做出这一点我做了这个改变:

#sidebar #filter.fixed /*Add #sidebar*/

选中 Demo Fiddle