【发布时间】:2013-11-06 15:25:49
【问题描述】:
我有一个 Web 应用程序,它以 100% 的宽度和高度调整 html 和 body 元素的大小,并将 overflow: scroll 放在 body 上以创建全屏幻灯片元素。我正在使用 jQuery Waypoints 进行粘性导航并确定当前可见的幻灯片。
由于 body 元素在技术上是唯一的滚动,我设置了context: body。这在 Firefox 中按预期工作,但在 Chrome 或 Safari 中不会触发航点。
我可以通过手动在滚动到应该触发的点后调用$.waypoints('refresh');来触发航点,但是在每个滚动事件之后调用它似乎是一个非常麻烦的解决方案。
$('body').on('scroll', function(){$.waypoints('refresh');})——它有效,但肯定不漂亮。
我假设这与每个浏览器解释 DOM 的方式有关,但是 Chrome 和 Safari 不能很好地处理可滚动元素中的航点是否有已知原因?
我正在寻找两件事中的一件,要么是我在使用航点时所做的倒退,要么是潜在的问题,以便我可以修复它并使航点对每个人都正常工作。
为了记录(在任何人询问之前),我已经完成了我的研究,这不是fixed elements 的问题。
编辑: 终于得到了为此而构建的 CodePen。 Take a look.
【问题讨论】:
-
似乎问题在于您操纵
body的方式和滚动行为。在scroll事件上设置超时是否使它不那么难看?这样它就不会触发每一个滚动,但只有当用户停止滚动一段时间,可能是几毫秒,比如当他们从滚动输入上抬起手指时。 -
@MikeLyons,我目前正在使用超时解决方案,它的性能更高,但仍然感觉像一个不需要的 hack。当您操纵滚动行为时,航点应该(并且根据我的经验,确实)与元素一起使用。这就是
context: scrollingElement选项的用途。似乎只有 Firefox 允许航点功能访问body内元素的滚动位置。 -
你能发个链接或jsfiddle吗?
-
@JoshHarrison 自从发布此内容以来,我一直在尝试构建一个,但一直被叫走。我刚刚完成,它位于codepen.io/justinthrelkeld/pen/qaGlK
-
您的原始实现有codepen吗?由于固定元素的偏移量是如何计算的,我无法强调您不想使用现在发布的笔。
标签: javascript google-chrome safari jquery-waypoints