在移动 safari 中,在处理touchmove
一个元素的过程中,我更改了className
该元素的。不幸的是,视觉变化不会在用户滚动时发生,或者直到惯性滚动的最后。
我该怎么做才能className
立即目视拍摄?
更多:显然这不仅限于 className 更改,而且似乎对 DOM 进行了任何更改,例如innerHTML
and style
。
在移动 safari 中,在处理touchmove
一个元素的过程中,我更改了className
该元素的。不幸的是,视觉变化不会在用户滚动时发生,或者直到惯性滚动的最后。
我该怎么做才能className
立即目视拍摄?
更多:显然这不仅限于 className 更改,而且似乎对 DOM 进行了任何更改,例如innerHTML
and style
。
我实际上建立了那个站点,是的,绕过这个限制的方法是不使用内置浏览器功能滚动站点,而是伪造它。JS 监听滚轮和键盘事件,并将主容器的 css top 属性补间到它自己的“scrollTop”。右边的滚动条当然是自定义的 JS 滚动条。在这种情况下,它同步到相同的内部 'scrollTop' 值。
整个网站实际上只是一个大补间,主时间线是它的 scrollTop 位置,所有子动画都在特定时间触发。JS 没有被缩小,所以看看 ScrollAnimator.js 文件,它就在那里。
不幸的是,这是设计使然。iOS Safari 会将所有 DOM 操作排队,直到滚动或手势结束。实际上,DOM 在滚动期间被冻结。
我以为我可以在苹果开发者页面上找到对此的参考,但我只能找到指向 jQueryMobile 的链接:http: //jquerymobile.com/test/docs/api/events.html。
请注意,iOS 设备在滚动期间冻结 DOM 操作,将它们排队以在滚动完成时应用。我们目前正在研究允许在滚动开始之前应用 DOM 操作的方法
希望这可以帮助!
只需将位置更改为-webkit-sticky
。不要设置顶部,这样它看起来就像一个普通元素,但执行起来就像一个固定元素。你可以立即更新它的样式,除了位置。