javascript – 高级jQuery粘贴边栏

前端之家收集整理的这篇文章主要介绍了javascript – 高级jQuery粘贴边栏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在(粘性)滚动侧边栏工作.问题是大多数粘性侧边栏没有考虑到边栏可以比视口更高(例如,如果许多项目被添加到篮子(侧边栏)).我正在试图解决什么?这些是要求:

>如果侧边栏的高度高于视口,应该是
滚动内容,并且div的底部应该坚持
当进一步向下滚动时,视口的底部.
>如果边栏的高度高于视口,则div
只有当你在底部时,才会显示下面的内容
页.
>当用户回滚时,侧边栏会滚动回到顶部
回到视口的顶部.
>如果侧边栏的高度小于视口,应该是
从上方向上滚动时向下滚动.

所以一切都有一些功能,而不是那么简单(我想).我所看到的最接近我想要实现的是这个例子:http://demo.techbrij.com/730/fix-sidebar-scrolling-jquery.php,但代码的写法不符合我的要求.

到目前为止,这是我所做的:DEMO

而我使用的jQuery代码

jQuery(document).ready(function($) {

var $sidebar   = $('.sidebar'),$content   = $('.content');

if ($sidebar.length > 0 && $content.length > 0) {
    var $window    = $(window),offset     = $sidebar.offset(),timer;

    $window.scroll(function() {
        clearTimeout(timer);
        timer = setTimeout(function() {
            if ($content.height() > $sidebar.height()) {
                var new_margin = $window.scrollTop() - offset.top;
                if ($window.scrollTop() > offset.top && ($sidebar.height()+new_margin) <= $content.height()) {
                    // Following the scroll...
                    $sidebar.stop().animate({ marginTop: new_margin });
                } else if (($sidebar.height()+new_margin) > $content.height()) {
                    // Reached the bottom...
                    $sidebar.stop().animate({ marginTop: $content.height()-$sidebar.height() });
                } else if ($window.scrollTop() <= offset.top) {
                    // Initial position...
                    $sidebar.stop().animate({ marginTop: 0 });
                }
            }
        },100); 
    });
}

});

解决方法

您正在使用边距来移动粘性侧边栏 – 我发现这是一个棘手的方法来处理您当前的问题(并且可能更重的方式).

一般来说,我喜欢在侧边栏添加一个类,使其成为“位置:固定”,这样浏览器就会保持锁定状态.

对于你当前的问题,你只需要根据它们滚动的距离,以编程方式滚动该位置固定的div(这也是100%的高度).看看我的例子,看看这是否是你以后的效果http://jsfiddle.net/ZHP52/1/

这里是jquery:

jQuery(document).ready(function($) {

var $sidebar   = $('.sidebar'),$content   = $('.content');

//Since our CSS is going to monkey with the height as you scroll,I need to know the initial height.
var sidebarHeight = $sidebar.height();

if ($sidebar.length > 0 && $content.length > 0) {
    var $window    = $(window),timer;

    $window.scroll(function() {

        if ($content.height() > sidebarHeight) {
            var new_margin = $window.scrollTop() - offset.top;
            if ($window.scrollTop() > offset.top) {
                // Fix sidebar
                $sidebar.addClass("fixed");
                // Scroll it the appropriate ammount
                $sidebar.scrollTop(new_margin);            
            }else{
                $sidebar.removeClass("fixed");
            }
        }
    });
}

});
原文链接:https://www.f2er.com/jquery/153515.html

猜你在找的jQuery相关文章