页面元素的滑动延迟效果是如何实现的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
islujw
V2EX    Javascript

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

  •  
  •   islujw 2017-10-06 21:35:53 +08:00 4230 次点击
    这是一个创建于 3005 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似 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. 变化和延迟速率。

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

    12 条回复    2017-12-07 23:18:23 +08:00
    azh7138m
        1
    azh7138m  
       2017-10-06 21:51:40 +08:00 via Android
    xieranmaya
        2
    xieranmaya  
       2017-10-06 22:31:34 +08:00
    transition timing function
    beizer curve
    islujw
        3
    islujw  
    OP
       2017-10-08 16:55:46 +08:00
    @xieranmaya 这是规定了动画的方法,那如何实时触发动画呢?可以看到 translate 的 Y 值是作为 HTML 的 DOM 不断在改变的,也就是说很可能是通过 js 来改变这个值,且值和元素所处的页面高度百分比有直接关系。如果我设置了 animation,那动画是既定而无法交互的;如果设置 transition,那么要有触发方式,例如 hover 或改变 class,这里应该是页面滑动造成的高度百分比改变,去改变 translate 的 Y 值,在这个前提下,再考虑 beizer curve 的设置。
    islujw
        4
    islujw  
    OP
       2017-10-08 18:39:24 +08:00
    @azh7138m 这个好像好似根据光标的位置来触发的?实际上例子中的是根据页面滑动来触发的(元素所在的页面高度百分比发生变化)。
    azh7138m
        5
    azh7138m  
       2017-10-08 21:27:46 +08:00via Android
    @islujw 视差滚动那三篇你真的看了吗。。。楼主莫非不是程序狗?
    islujw
        6
    islujw  
    OP
       2017-10-09 01:03:35 +08:00
    @azh7138m Sorry,只注意到了第一篇。技术只是爱好,不是职业,还请多包涵和高明指教了。
    azh7138m
        7
    azh7138m  
       2017-10-09 08:44:49 +08:00 via Android
    @islujw 嘛嘛,你都看完就知道了
    islujw
        8
    islujw  
    OP
       2017-11-01 01:28:39 +08:00
    @azh7138m 直觉这些都加上,页面效率会变得很低吧,配置一般的电脑估计打开网页都转风扇了。我想 Apple 网页上那么多内容,应该是有更轻量的解决方案的。总之先感谢了!
    azh7138m
        9
    azh7138m  
       2017-11-01 01:31:50 +08:00
    @islujw 这才多少节点,不会的
    azh7138m
        10
    azh7138m  
       2017-11-01 01:37:24 +08:00
    @islujw 苹果这个页面就是不断改变 transform translate,这属性甚至可以用 GPU 加速
    islujw
        11
    islujw  
    OP
       2017-11-17 12:28:15 +08:00
    @azh7138m 对,是这样的,但应该是 js 计算的。
    islujw
        12
    islujw  
    OP
       2017-12-07 23:18:23 +08:00
    @azh7138m 这次又发现新的一个网页: https://www.apple.com/watch/apple-heart-study/ 这个也是随着元素所在的高度变化,相应控制 css 的相关值。高度百分比,对应值,这个是核心。你之前提供的方法,似乎就比较局限了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3252 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:05 PVG 08:05 LAX 16:05 JFK 19:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86