【发布时间】:2013-08-14 23:50:45
【问题描述】:
我试图让 Bootstrap 的 scrollspy 在响应式站点上可靠地工作,在该站点上,顶部导航栏的高度根据媒体/浏览器的宽度而变化。因此,我不是硬编码 data-offset 属性上的偏移量,而是通过 Javascript 初始化动态设置它,如下所示:
$('body').scrollspy({ offset: 70, target: '#nav' });
对于宽布局(即 Bootstrap -lg),它工作得很好,但对于较窄的布局,似乎有一个“累积”的偏移量。换句话说,它在第一部分工作得很好,但随后需要增加像素来激活后面的部分(例如,下一个部分是 90 像素,第三部分是 110 像素,等等)。
我尝试按照此答案中的说明直接操作 scrollspy 对象: How do I set the offset for ScrollSpy in Bootstrap? 但无济于事。
有人可以推荐一种在偏移量根据媒体宽度而变化的响应式网站中实现 scrollspy 的规范方法吗?
附加信息:
我刚刚分析了这两种情况下的 scrollspy 对象,结果发现仅通过 data- 属性与通过 JS 进行初始化时,偏移列表是不同的。似乎当我通过 JS 初始化它时,偏移量数组在一些 BS 响应调整发生之前被填充,因此高度不同。 在所有响应的东西都运行之后,我如何触发 scrollspy 的初始化? BS 调整布局后是否有挂钩/回调?是否涉及到 JS,或者所有响应式的东西都由 CSS 处理?
【问题讨论】:
-
有趣的是,如果我让 scrollspy 从
data-属性初始化自己,它工作正常。只有当我从 Javascript 中执行此操作时,我才会获得“累积”偏移效果。以某种方式从 JS 初始化 scrollspy 就像在上面的 sn-p 中并不等同于让它从data-属性中进行。还没弄清楚为什么。 -
响应性仅由 CSS 处理(除非您在 IE8 中具有
respond.js以实现兼容性)。您是否将 js 代码包装在文档就绪处理程序中? -
是的,我在
$(document).ready(function() {内打电话给$('body').scrollspy({...})。但正如我上面提到的,与使用data-属性自行初始化相比,这样做会创建一组不同的偏移量。 -
也许
$(document).ready在这里有所作为。该插件使用$(window).on('load'设置数据属性。另见:stackoverflow.com/questions/4395780/… -
我认为你是对的,这可能是关键。根据该评论,
$(document).ready比$(window)加载事件更早(通常更早)发生。所以很可能高度还没有完全调整。一种选择是尝试在后一个回调上挂钩偏移量,但此时我选择了一种完全不同的方法,调整 CSS 填充等。谢谢大家的帮助和见解。
标签: twitter-bootstrap responsive-design twitter-bootstrap-3 scrollspy