【问题标题】:Sticky Sidebar - Stop at element?粘性侧边栏 - 在元素处停止?
【发布时间】:2017-07-10 11:16:24
【问题描述】:

我想要一个棒状站点栏。我搜索并找到了这段代码:

<script>
    var sidebar = $('#sidebar-content'),
        nav = $('.sidebar-content'),
        startPosition = sidebar .offset().top,
        stopPosition = $('#abspann').offset().top - nav.outerHeight();

    $(document).scroll(function () {
        //stick nav to top of page 
        var y = $(this).scrollTop()

        if (y > startPosition) {
            nav.addClass('sticky');
            if (y > stopPosition) {
                nav.css('top', stopPosition - y);
            } else {
                nav.css('top', 0);
            }
        } else {
            nav.removeClass('sticky');
        } 
    });
</script>

问题是它不起作用...我已经尝试用jQuery 替换$ 但仍然...不起作用。唯一的原因可能是我仍然在控制台中遇到的错误:

未捕获的类型错误:无法读取 undefinedat 的属性“顶部” (索引):411

目前的代码是这样的:

<script>
var sidebar = jQuery('#sidebar-wrap'),
    nav = jQuery('.sidebar-content'),
    startPosition = jQuery('#sidebar-wrap').offset().top,
    stopPosition = jQuery('#abspann').offset().top - nav.outerHeight();

jQuery(document).scroll(function () {
    //stick nav to top of page
    var y = jQuery(this).scrollTop()

    if (y > startPosition) {
        nav.addClass('sticky');
        if (y > stopPosition) {
            nav.css('top', stopPosition - y);
        } else {
            nav.css('top', 0);
        }
    } else {
        nav.removeClass('sticky');
    } 
});
</script>

如果它正常工作,侧边栏应该停在元素#abspann。想知道。

我所说的网站是this。并且源码可以在here找到。

我怎样才能让它工作?

亲切的问候

【问题讨论】:

  • Fiddle 在 Firefox 中对我来说工作得非常好。
  • 是的,在我的浏览器中也...但不在我的网站上..

标签: javascript jquery html sidebar sticky


【解决方案1】:

这是因为您的脚本是在加载元素之前加载的,因此请使用$.ready(),以便每个元素在使用之前都可用。

<script src="JQUERY_LIB_URL_HERE"></script>
<script>
    jQuery(function(){
       var sidebar = jQuery('#sidebar-wrap'),
        nav = jQuery('.sidebar-content'),
        startPosition = jQuery('#sidebar-wrap').offset().top,
        stopPosition = jQuery('#abspann').offset().top - nav.outerHeight();
        jQuery(document).scroll(function () {
            //stick nav to top of page
            var y = jQuery(this).scrollTop()

            if (y > startPosition) {
                nav.addClass('sticky');
                if (y > stopPosition) {
                    nav.css('top', stopPosition - y);
                } else {
                    nav.css('top', 0);
                }
            } else {
                nav.removeClass('sticky');
            } 
        });
    });
</script>

【讨论】:

  • 现在我在函数的开头得到(index):409 Uncaught TypeError: $ is not a function at (index):409...
  • 添加代码前先包含jquery库,再编写滚动相关代码。或将$ 替换为jQuery,您可以从我更新的答案中获得提示。
  • 或者将$更改为jQuery,以防您在兼容模式下使用jQuery。你甚至可以把$作为函数的参数,这样你就可以在函数内部使用$
  • 好的,现在它是一种工作......你能检查一下吗? - 但为什么侧边栏没有停在#abpsann
  • 我不这么认为,任何人都可以根据您发布的代码帮助您找到隐藏的问题。所以我认为你应该用 sn-p/fiddle 编辑你的问题,和/或如果这是新问题,那么再问一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2012-05-27
  • 1970-01-01
相关资源
最近更新 更多