我的回复专门针对https://victoriabeckham.landrover.com/INT
他们根据您提供的输入类型模拟滚动。您实际上并没有滚动页面,然后为各种属性设置动画。它正在读取触摸事件、鼠标滚轮或它们自定义的烘焙滚动条,并查看您想要滚动多少。页面中的所有内容都在一个容器中。这样,当您进行触摸事件时,它只是读取您在页面上移动了多少。
最重要的是,他们使用动画循环来使一切移动。他们正在使用 window.requestAnimationFrame 方法来优化他们页面中的更改,以便它在 iPad 和浏览器中顺利运行。这是一个带有描述的页面:
http://paulirish.com/2011/requestanimationframe-for-smart-animating/
浏览器可以将并发动画一起优化为单个回流和重绘循环,从而获得更高保真度的动画。例如,与 CSS 过渡或 SVG SMIL 同步的基于 JS 的动画。此外,如果您在不可见的选项卡中运行动画循环,浏览器将不会继续运行,这意味着 CPU、GPU 和内存使用量减少,从而延长电池寿命。
最重要的是,他们构建了一个自定义关键帧对象,该对象将决定页面上所有内容的动画方式。我对这个设置流口水了。太糟糕了,它不是一个开放的框架。您可以在关键帧对象中设置效果的开始位置、结束位置、缓动等,它们的框架将通过动画循环处理所有其余部分。
{
selector: '#outro2 > .content2',
startAt: outroStart+500,
endAt: outroStart+1000,
onEndAnimate:function( anim ) {},
keyframes: [
{
position: 0,
properties: {
"margin-top": 650
}
},
{
position: 1,
ease: TWEEN.Easing.Sinusoidal.EaseOut,
properties: {
"margin-top": 650
}
}
]
},
总之,我相信自定义实现的滚动和使用 requestAnimationFrame 方法的自定义动画循环的组合超越了通常与 iOS 设备相关的视差限制。