16

在移动 safari 中,在处理touchmove一个元素的过程中,我更改了className该元素的。不幸的是,视觉变化不会在用户滚动时发生,或者直到惯性滚动的最后。

我该怎么做才能className立即目视拍摄?

更多:显然这不仅限于 className 更改,而且似乎对 DOM 进行了任何更改,例如innerHTMLand style

4

3 回答 3

15

我实际上建立了那个站点,是的,绕过这个限制的方法是不使用内置浏览器功能滚动站点,而是伪造它。JS 监听滚轮和键盘事件,并将主容器的 css top 属性补间到它自己的“scrollTop”。右边的滚动条当然是自定义的 JS 滚动条。在这种情况下,它同步到相同的内部 'scrollTop' 值。

整个网站实际上只是一个大补间,主时间线是它的 scrollTop 位置,所有子动画都在特定时间触发。JS 没有被缩小,所以看看 ScrollAnimator.js 文件,它就在那里。

于 2012-06-01T20:05:17.923 回答
13

不幸的是,这是设计使然。iOS Safari 会将所有 DOM 操作排队,直到滚动或手势结束。实际上,DOM 在滚动期间被冻结。

我以为我可以在苹果开发者页面上找到对此的参考,但我只能找到指向 jQueryMobile 的链接:http: //jquerymobile.com/test/docs/api/events.html

请注意,iOS 设备在滚动期间冻结 DOM 操作,将它们排队以在滚动完成时应用。我们目前正在研究允许在滚动开始之前应用 DOM 操作的方法

希望这可以帮助!

于 2012-05-11T13:13:03.263 回答
4

只需将位置更改为-webkit-sticky。不要设置顶部,这样它看起来就像一个普通元素,但执行起来就像一个固定元素。你可以立即更新它的样式,除了位置。

于 2014-07-30T03:51:49.760 回答