安卓浏览器上的滚动事件未触发.需要解决方法
Scroll event on Android Browser not firing. Need workaround
我创建了一个带有视差街景的网站。有关存档版本,请参阅此处。
它在所有主要的桌面浏览器和Safari Mobile上运行良好。它在Mobile Firefox和Chrome for Android Beta中也能正常工作。但是,默认的 Android 浏览器存在滚动事件问题。让我说清楚。滚动不是问题。div 根据需要滚动。滚动事件不会触发。这个问题我在Honeycomb和ICS上遇到过。
我不关心其他移动浏览器,因为对于移动屏幕尺寸,通常看不到视差场景;mediaquery和条件JavaScript加载会照顾到这一点。响应式设计和所有爵士乐。
基本上,我编写了一个parallise() jQuery插件,它根据每个图像的位置和"深度"来定位每个图像。此函数绑定到滚动事件。
在 Android 浏览器上,此事件仅在下一次触摸开始时触发,而不是连续触发。
好的,所以我想也许如果我将函数绑定到touchstart
、touchmove
和touchend
事件,我会解决我的问题。没有雪茄。其他触摸事件也被窃听。应用建议的解决方法会导致事件触发,但正如我必须e.preventDefault()
的那样,滚动(练习的全部要点)被禁用。
如果我只是轮询舞台div 相对于窗口div 的位置怎么办?事实证明,位置信息仅在下一次触摸开始时更新。
我正处于束缚的尽头。任何帮助将不胜感激。
即使触摸事件在有缺陷的 Android 版本上正常工作,并且您随后能够在拖动期间有效地跟踪本机滚动位置,这也很容易出错。例如,它不会考虑触摸完成后发生的动量动画。
iOS和Android做出了牺牲,以提高滚动性能。在这两个平台上,在滚动完成之前,无法获得准确的滚动位置。滚动事件(在<body>
上)在动量动画完成之前不会触发。因此,虽然您最初的问题是关于溢出<div>
上的滚动事件,但无论如何解决这个问题可能对您并不完全有帮助。
如果您希望动画随滚动及时更新,则需要以编程方式执行滚动,而不是使用浏览器的本机滚动。最好的库是iScroll。您可以非常轻松地实现视差效果,如本演示所示。
如果您需要更复杂的效果(在您的示例中为行走字符),您可以选择 iScroll 的"探针"版本,它允许对滚动位置进行像素完美的轮询,以换取性能降低。
但是,使用 iScroll 有很多缺点:
- 您可能需要更改标记和样式
- 对于桌面浏览器来说,这是不必要的开销,但由于标记更改可能很难仅用作后备
- 滚动不会感觉完美 - 在iOS上,通常具有出色的滚动性能 - 动量计算的微小差异可能会让人感到不和谐。在Android上,滚动可能会变得比平时更滞后。
滑动不需要 prevent的垫片在触摸启动时默认:https://github.com/TNT-RoX/android-swipe-shim
- 使用JSON序列化图论树的解决方法
- X-Content-Type-Options=nosniff解决方法
- 供应商前缀 CSS 解决方法(引导程序)的速度和大小
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- 当服务器从 http 更改为 https 时,有哪些可能的方法可以解决问题
- .attr(“href”) 的问题!解决此问题的简单方法
- 解决向api.twitter.com发出XMLHttpRequest的方法
- 无法使用HTML5 Web存储保存布尔值的解决方法
- HTML”;文件“/OpenFile对话框解决方法
- 有没有一种方法可以在IE8中解决我的Rails javascript应用程序.js的问题
- 多行链接中引导工具提示的解决方法
- 使用jsonp解决方法进行同步ajax调用
- YQL推特时间线超出速率限制.解决方法
- 嵌套文档.writes和第三方广告在IE中不起作用!!!!任何安全的解决方法
- EmberJS - 使用几个解决方案从外部调用组件方法(呼吁讨论)
- 加载外部页面的跨域解决方法
- Emberjs - 基于控制器属性进行过滤的奇怪解决方法
- Z 索引绝对定位元素低于父级,具有 z 索引解决方法
- 安卓浏览器触端事件错误解决方法
- 是否有任何方法/解决方法可以使用open方法“window.open”关闭JavaScript尚未打开的窗口