页面元素的滑动延迟效果是如何实现的?

2017-10-06 21:35:53 +08:00
 islujw

类似 https://www.apple.com/cn/iphone-x/ 页面的 class="subsection new-features content-active element-in-view" 的部分,三个 iPhone X 图形在滑动页面的过程中,有不同程度的滑动延迟。页面滑动到不同位置时,元素 CSS 的 transform: translate 的 Y 值会按一定速率变化,且有点类似 iMessage 气泡滑动时不同起泡的延迟一样,非常舒服。

这种效果出现在很多页面,比如 Apple Watch 的图形会在滑动过程中有轻微的位置浮动,看起来像是漂浮在空气中一样。

猜测有两个关键点:1. 元素在不同高度时设置相应的 css 值; 2. 变化和延迟速率。

不了解这个技术,搜索一些描述性关键词,查不到结果。请问这是如何控制实现的?

3886 次点击
所在节点    JavaScript
12 条回复
azh7138m
2017-10-06 21:51:40 +08:00
xieranmaya
2017-10-06 22:31:34 +08:00
transition timing function
beizer curve
islujw
2017-10-08 16:55:46 +08:00
@xieranmaya 这是规定了动画的方法,那如何实时触发动画呢?可以看到 translate 的 Y 值是作为 HTML 的 DOM 不断在改变的,也就是说很可能是通过 js 来改变这个值,且值和元素所处的页面高度百分比有直接关系。如果我设置了 animation,那动画是既定而无法交互的;如果设置 transition,那么要有触发方式,例如 hover 或改变 class,这里应该是页面滑动造成的高度百分比改变,去改变 translate 的 Y 值,在这个前提下,再考虑 beizer curve 的设置。
islujw
2017-10-08 18:39:24 +08:00
@azh7138m 这个好像好似根据光标的位置来触发的?实际上例子中的是根据页面滑动来触发的(元素所在的页面高度百分比发生变化)。
azh7138m
2017-10-08 21:27:46 +08:00
@islujw 视差滚动那三篇你真的看了吗。。。楼主莫非不是程序狗?
islujw
2017-10-09 01:03:35 +08:00
@azh7138m Sorry,只注意到了第一篇。技术只是爱好,不是职业,还请多包涵和高明指教了。
azh7138m
2017-10-09 08:44:49 +08:00
@islujw 嘛嘛,你都看完就知道了😀
islujw
2017-11-01 01:28:39 +08:00
@azh7138m 直觉这些都加上,页面效率会变得很低吧,配置一般的电脑估计打开网页都转风扇了。我想 Apple 网页上那么多内容,应该是有更轻量的解决方案的。总之先感谢了!
azh7138m
2017-11-01 01:31:50 +08:00
@islujw 这才多少节点,不会的
azh7138m
2017-11-01 01:37:24 +08:00
@islujw 苹果这个页面就是不断改变 transform translate,这属性甚至可以用 GPU 加速
islujw
2017-11-17 12:28:15 +08:00
@azh7138m 对,是这样的,但应该是 js 计算的。
islujw
2017-12-07 23:18:23 +08:00
@azh7138m 这次又发现新的一个网页: https://www.apple.com/watch/apple-heart-study/ 这个也是随着元素所在的高度变化,相应控制 css 的相关值。高度百分比,对应值,这个是核心。你之前提供的方法,似乎就比较局限了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/395689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX