排除 CSS 的 scroll-snap
,在 Safari 下会奇怪地带动 body
或其他先祖元素滚动,且浏览器兼容也不好。
如果有强迫症的话,定时一段时间检测滚动停止后,再滚动到最近的位置不是很丝滑。假设内容为一堆 24px
高的列表项目:
对于触控,在 scrollend
时计算出最后一小段时间的加速度,然后平滑滚动到对应的位置就可以。
对于鼠标,因为不知道滚动什么时候停止,以及触控板和鼠标的滚动方式也千奇百怪,想到一个基本上不可行的方法:每次触发 wheel
事件后,根据最后一小段时间的 deltaY
和时间的关系插值,推测出滚动结束的时间和终点位置,记 positionOffset
为预期终点位置和最近元素坐标间的距离,time
为允许的缓冲时间,以 1px
为最小分度,每隔 Math.abs(positionOffset) / time
让 scrollTop++
或 --
。数值发生变化时(什么数值?)取消之前的计时并重新计时。显然这很麻烦而且根本没有头绪。
有可以支的招吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.