推特引导滚动间谍总是选择最后一个元素
Twitter Bootstrap scrollspy always selecting last element
我有一个scrollspy问题,在这个fiddle中重新创建:http://jsfiddle.net/jNXvG/3/
如演示中所示,无论滚动位置如何,ScrollSpy插件始终保持最后一个菜单项处于选中状态。我读过其他问题和答案,也尝试过offset
等的不同组合,但都没有帮助。我搞不清楚出了什么问题。
我不想编辑我的模板以包含丑陋的html"数据"标签,所以我通过JavaScript调用scrollspy()
来激活插件。
下一步是删除固定的内容高度,并在侧边栏上使用"词缀"。
我遇到了完全相同的问题,对我来说,将height: 100%
添加到body元素就是解决方案。
(显然,其他任何东西都无法使其工作)
您需要将ScrollSpy附加到将触发滚动事件的元素,而不是反映滚动位置的菜单:
$('#content').scrollspy();
JSFiddle
仅供参考:为了获得我想要的效果(与Twitter Bootstrap文档页面上的效果相同),我需要将"body"设置为我的目标元素。。。我无法通过使用我想监视的元素的直接父元素作为目标来实现滚动。
(它总是自动选择我的最后一个元素)
height:100%;
在导致问题的身体上(因为我没有那样的东西)。
那是
position:absolute;
在集装箱分类上
希望它能帮助别人。。。
我用100%的身高修复了它,但它在Firefox上不起作用。在浪费了这么多时间之后,在github页面上找到了答案。将高度100%应用于HTML标记可以修复Chrome和Firefox的问题。
https://github.com/twbs/bootstrap/issues/5007
调用scrollspy方法时,通常指定body标记和nav元素。
<script>
$(function() {
$('body').scrollspy({ target: '#faq_sidebar' });
});
</script>
上面的JavaScript相当于:
<body data-spy="scroll" data-target="#faq_sidebar">
唯一不指定body标记的情况是,如果您想像上面的JSFiddle中那样使用嵌套滚动条来跟踪元素。
如果上面的建议没有解决其他人的问题,请尝试在页面的第一行添加<!DOCTYPE html>
。这是一个简单的步骤,解决了我的问题。
我也遇到了同样的问题;从<body>
元素中删除height: 100%
为我解决了这个问题
,$element=$(element)。is('body')$(窗口):$(元素)
到此:
,$element=$(element)。is('body')$(窗口):$(窗口)//$(元素)
(注意//后面的元素是一个注释,所以我不会忘记我更改了它)
这为我修复了它。
ScrollSpy是非常无情的,至少可以说文档很少。。。根据您的实现,对此有不同且冲突的修复方法。。。
嵌套内容是我的问题。这为我修复了它:
(1) 确保你的导航中的所有href都与你监视的目标容器中的相应ID相匹配。
(2) 如果监视内容容器中的项目是嵌套的,那么它将不起作用。。。
此:
<ul class="nav" id="sidebar">
<li>
<a href="#navItem1" />
</li>
<li>
<a href="#navItem2" />
</li>
</ul>
<div id="spiedContent"> <!-- nested content -->
<div id="navItem1">
<div id="navItem2"></div>
</div>
</div>
到此:
<ul class="nav" id="sidebar">
<li>
<a href="#navItem1" />
</li>
<li>
<a href="#navItem2" />
</li>
</ul>
<div id="spiedContent"> <!-- flat content -->
<div id="navItem1"></div>
<div id="navItem2"></div>
</div>
一切都好!
我的猜测是,如果你看一下scrollspy代码,它并没有越过id的间谍容器的第一个子对象。
确保您没有混合实现。如果你的身体标签上有data-spy="scroll" data-target=".bs-docs-sidebar"
,你就不需要$('#content).scrollspy()
。
我认为这可能是ScrollSpy中的一个错误。
我也遇到了同样的问题,当我浏览代码时,我可以看到所有目标的偏移量都是相同的(-95px)。我检查了这些设置的位置,它使用了position()函数。这将返回元素相对于父元素偏移量的位置。
我改为使用offset()函数。此函数返回元素相对于页面偏移量的位置。一旦我这样做了,它就完美地工作了。不确定为什么这不是默认行为。
position()函数在我的情况下不起作用的原因是,我必须有一个空的div,它实际上绝对位于容器顶部上方95px。我需要这个作为我的目标,这样标题就不会隐藏在我固定在页面顶部的标题后面。
当我试图解决这个问题时,我使用了Mehdi Benadada所说的一些内容,并在body
中添加了position: relative;
。我在样式表中添加了以下内容:
body {
position: relative;
height: 100%;
}
希望这对将来的某个人有所帮助。
您不必调用方法scrollspy()。此外,你不需要设定高度:任何地方都可以达到100%。
你只需要:
- 位置:相对适用于身体
- 添加数据bs spy=";滚动";到您的内容或身体
- 使用导航栏id添加数据bs目标
https://i.stack.imgur.com/U1xCl.png
这对我有帮助。
似乎只有当使用的容器有滚动条时,滚动间谍才能工作(使用bootstrap 5测试)。您可以将data-bs-spy="scroll"
和data-bs-target="#target-nav"
属性放在最近的具有滚动条的父级中。
在我的案例中,我添加了引导程序版本5.2.3的scrollspy组件,但我的引导程序js-cdn是5.0。在我添加了5.2.3 js cdn之后,它就工作了
您还可以添加下载的引导程序js文件
并且确保也添加引导css cdn
- 无法在Ionic select中预先选择最后一个选项
- 推特引导滚动间谍总是选择最后一个元素
- 选择页面上具有特定类的最后一个元素
- 选择表中的最后一个元素
- jQuery - 选择具有相同 ID 的组的最后一个元素
- Knockout JS单选按钮如果所有值都为true,则选择最后一个按钮
- 通过鼠标向下选择父级中的最后一个子项
- jQuery slice() 方法 在 html 中选择元素(第一个/最后一个)
- 如何在 Jquery/Javascript 中选择预定义选择的第一个和最后一个元素而不循环
- 每当我在 jquery UI 日期选择器中更改月份/年份时,如何获取该月的第一个日期和最后一个日期
- 默认情况下,在 angularjs 中选择下拉列表中的最后一个位置显示占位符
- 从iPhone的多选框中取消选择最后一个选项
- jQuery:隐藏按钮,直到选择最后一个下拉列表
- 从下拉列表中选择最后一个值,然后对其他下拉列表禁用它
- 选择不适用于动态创建的选择图元.总是选择最后一个选项
- 我有DIV和它的子DIV,我想用jQuery选择最后一个DIV.父DIVS具有id
- 选择最后一个单词或“可满足内容”的特定范围
- 如何在下拉列表中选择最后一个索引值
- jQuery each()只选择最后一个值
- 如何使用last()选择最后一个元素,而不需要遍历子元素