Android浏览器上的滚动事件未触发.需要解决方法

Xan*_*fer 5 javascript events android dom

我创建了一个带有视差街景的网站.请参阅此处获取存档版本.

它适用于所有主流桌面浏览器和Safari Mobile.它在Mobile Firefox和Chrome for Android Beta中也能很好地工作.但是,默认的Android浏览器存在滚动事件的问题.让我说清楚.滚动不是问题.div根据需要滚动.滚动事件不会触发.我在Honeycomb和ICS上遇到过这个问题.

我不关心其他移动浏览器,因为对于移动屏幕尺寸,人们通常看不到视差场景; mediaqueries和条件JavaScript加载可以解决这个问题.响应式设计和所有爵士乐.

基本上,我写了一个parallise()jQuery插件,根据它的位置和"深度"定位每个图像.此函数绑定到scroll事件.

在Android浏览器中,此事件仅在下一次触摸开始时触发,而不是连续触发.

好了,我想也许如果我绑定的功能touchstart,touchmove以及touchend事件我会解决我的问题.没有雪茄.其他触摸事件也被窃听.应用建议的解决方法会导致事件触发,但正如我e.preventDefault()所知,滚动(练习的整个点)被禁用.

如果我只是相对于窗口div轮询舞台div的位置怎么办?事实证明,位置信息仅在下一次触摸开始时更新.

我在我的系绳的尽头.任何帮助将非常感激.

Nev*_*ett 1

即使触摸事件在有缺陷的 Android 版本上正常工作,并且您可以在拖动过程中有效地跟踪本机滚动位置,这也很容易出错。例如,它不会考虑触摸完成后发生的动量动画。

iOS 和 Android 为提高滚动性能做出了牺牲。在这两个平台上,在滚动完成之前不可能获得准确的滚动位置。在动量动画完成之前,滚动事件(在 上<body>)不会触发。因此,虽然您最初的问题是关于溢出上的滚动事件<div>,但修复此问题可能对您并不完全有帮助。

如果您希望动画随着滚动及时更新,那么您需要以编程方式执行滚动,而不是使用浏览器的本机滚动。执行此操作的最佳库是iScroll您可以非常轻松地实现视差效果,如本演示所示。

如果您需要更复杂的效果(在您的示例中为行走角色),您可以选择 iScroll 的“探针”版本,它允许对滚动位置进行像素完美轮询,但会降低性能。

然而,使用 iScroll 有很多缺点:

  • 您可能需要更改标记和样式
  • 对于桌面浏览器来说这是不必要的开销,但由于标记更改可能很难仅用作后备
  • 滚动感觉并不完美 - 在 iOS 上,其通常具有出色的滚动性能 - 动量计算的细微差别可能会让人感到不和谐。在 Android 上,滚动可能会比平时更加​​滞后。