javascript - 无法读取未定义的属性 '$scrollElement'

标签 javascript jquery twitter-bootstrap scrollspy

当我向下滚动页面时,此脚本的标题出现错误。我想要在部分导航菜单上有一个进度条。

当前代码:

(function($) {
    $(document).ready(function() {
        var $window = $(window),
        $body = $(document.body),
        $doc = $('.doc-container'),
        $nav = $doc.find ('.doc-nav');

        // make the document navigation affix when scroll
        $nav.affix({
            offset: {
                top: function () {
                    return 200; // replace with your top position to start affix
                },
                bottom: function () {
                    return 300; // replace your bottom position to release the affix
                }
            }
        });

        // change navigation active according to scroll
        $body.scrollspy({
            target: '.doc-sidebar'
        });

        // add progress bar for navigation
        $nav.find ('a').before ($('<span class="docs-progress-bar" />'));

        $nav.on ('activate activate.bs.scrollspy', function () {
            $body.scrollspy("refresh");
            var $active = $nav.find('li.active');
            $active.prevAll().find('.docs-progress-bar').css ('width', '100%');
            $active.nextAll().find('.docs-progress-bar').css ('width', '0%');
        });

        $window.on ('scroll', function (event) {
            if (this.timeout) {
                clearTimeout(this.timeout);
            }
            this.timeout = setTimeout (function () {
                var $active = $nav.find('li.active'),
                $progress = $active.find('.docs-progress-bar'),
                $scrollspy = $body.data('bs.scrollspy'),
                scrollTop    = $scrollspy.$scrollElement.scrollTop() + $scrollspy.options.offset,
                scrollHeight = $scrollspy.$scrollElement[0].scrollHeight || $scrollspy.$body[0].scrollHeight,
                maxScroll    = scrollHeight - $scrollspy.$scrollElement.height(),
                offsets      = $scrollspy.offsets,
                targets      = $scrollspy.targets,
                activeTarget = $scrollspy.activeTarget,
                i;

                if (scrollTop >= maxScroll) {
                    $progress.css ('width', '100%');
                    return ;
                }

                if (activeTarget && scrollTop <= offsets[0]) {
                    $progress.css ('width', '0%');
                    return ;
                }
                for (i = offsets.length; i--;) {
                    if (scrollTop >= offsets[i]
                    && (!offsets[i + 1] || scrollTop <= offsets[i + 1])) {
                        var p1 = offsets[i],
                        p2 = scrollTop,
                        p3 = !offsets[i + 1] ? maxScroll : offsets[i + 1],
                        p = (p2-p1)/(p3-p1)*100;
                        $progress.css ('width', (p < 2 ? 2 : p) + '%');
                        return ;
                    }
                }
            }, 100);
        });
    });
})(jQuery);

错误在这一行:

scrollTop    = $scrollspy.$scrollElement.scrollTop() + $scrollspy.options.offset,

有什么解决这个问题的建议吗?

这里是演示链接:DEMO

最佳答案

您需要获取对 ScrollSpy 插件的引用:

$body.data('scrollspy')

代替:

$body.data('bs.scrollspy')

bs 前缀用于 Bootstrap 注册的自定义 Events,而不是数据。

关于javascript - 无法读取未定义的属性 '$scrollElement',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25874291/

相关文章:

javascript - Firefox 扩展 : close event on popup

javascript - 为什么它有效 -> key : 'hey' ->'hey' and doesnt throw any error?

javascript - 将对象函数传递给事件监听器 javascript

javascript - PreventDefault 在 Firefox 中不生效

javascript - 表格中的 Angular UI 弹出框(ng-repeat)。使用 popover-is-open,如何防止所有弹出窗口打开?

javascript - Bootstrap 3 - 下拉菜单项中的取消按钮

css - 我需要使用媒体查询设置 anchor 标记中心

javascript - JPlayer - IE 中的媒体错误

jquery - Ajax提交表单安全吗?

jquery - 将 '&' 作为查询字符串中参数值的一部分传递的标准方法