4

我有一个简单的 Bootstrap 模式设置,并且在模式中我有一个nav和 scrollspy 设置的内容。但是,它不起作用。我看到它被激活了,但导航永远不会更新。

完整的源码在这里太长了,你看不到我得到的效果,所以我设置了一个jsfiddle

我正在使用该data-spy="scroll"方法来启用它。我做错了什么?为什么导航没有根据您的位置更新?

4

4 回答 4

7

bootstrap scrollspy 仍然有一些错误(我真的很喜欢 bootsrap)。我为此使用了一个自定义脚本,它工作得更好,更灵活:

<script type="text/javascript">
$(document).ready(function(){
var lastId, topMenu = $(".menu-sidebar"),
    topMenuHeight = topMenu.outerHeight() + 150,
    menuItems = topMenu.find("a"),
    scrollItems = menuItems.map(function() {
        var item = $($(this).attr("href"));
        if (item.length) {
            return item;
        }
    });

menuItems.click(function(e) {
    var href = $(this).attr("href"),
    topMenuHeight = topMenu.outerHeight() + 20,
        offsetTop = href === "#" ? 0 : $(href).offset().top - topMenuHeight + 1;
    $('html, body').stop().animate({
        scrollTop: offsetTop
    }, 300);
    e.preventDefault();
});

$(window).scroll(function() {
    var fromTop = $(this).scrollTop() + topMenuHeight;

    var cur = scrollItems.map(function() {
        if ($(this).offset().top < fromTop) return this;
    });
    cur = cur[cur.length - 1];
    var id = cur && cur.length ? cur[0].id : "";

    if (lastId !== id) {
        lastId = id;
        menuItems.parent().removeClass("active").end().filter("[href=#" + id + "]").parent().addClass("active");
    }
});
});
</script>

来源:http: //jsfiddle.net/mekwall/up4nu/

于 2012-09-21T12:27:42.587 回答
4

嘿,我认为这里有两个问题:

(1) 将 scrollspy 放在身体以外的东西上会导致问题。看看这个:

在 Twitter Bootstrap 的 ScrollSpy 中,我究竟可以在哪里放置 data-spy="scroll"?

基本上,如果您添加:

#area-to-watch {
    height: 200px;
    overflow: auto; 
}

它将允许您滚动监视以“监视”身体以外的东西。 http://jsfiddle.net/hajpoj/SZYKM/ 这是你的 jsfiddle 的修改版本

(2) 将 scrollspy 放入模型会导致更多问题。如果你把上面的东西放到一个模型中,它有点吓坏了。我不积极,但我认为你需要做类似的事情

.scrollspy('refresh')

在文档中说明http://twitter.github.com/bootstrap/javascript.html#scrollspy

于 2012-08-12T20:42:38.940 回答
0

请确保您的引导文件夹包含 ScrollSpy 所需的所有 .js 文件

就我而言,我的引导文件夹 (bootstrap/js/) 包含以下文件:

<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap-transition.js"></script>
<script src="bootstrap/js/bootstrap-alert.js"></script>
<script src="bootstrap/js/bootstrap-modal.js"></script>
<script src="bootstrap/js/bootstrap-dropdown.js"></script>
<script src="bootstrap/js/bootstrap-scrollspy.js"></script>
<script src="bootstrap/js/bootstrap-tab.js"></script>
<script src="bootstrap/js/bootstrap-tooltip.js"></script>
<script src="bootstrap/js/bootstrap-popover.js"></script>
<script src="bootstrap/js/bootstrap-button.js"></script>
<script src="bootstrap/js/bootstrap-collapse.js"></script>
<script src="bootstrap/js/bootstrap-carousel.js"></script>
<script src="bootstrap/js/bootstrap-typeahead.js"></script>
<script src="bootstrap/js/bootstrap-affix.js"></script>

<script src="bootstrap/js/holder/holder.js"></script>
<script src="bootstrap/js/google-code-prettify/prettify.js"></script>

<script src="bootstrap/js/application.js"></script>
于 2013-02-25T08:37:40.607 回答
0

在模态显示如下之后,您应该调用 .scrollspy('refresh') :

 $('#myModal').on('shown.bs.modal', function (e) {
        $('.modal-body').scrollspy('refresh');
 });
于 2014-05-04T20:11:11.137 回答