Open SyMind opened 2 years ago
原视频:https://www.youtube.com/watch?v=laPsceJ4tTY&t=1s
我们只使用 CSS 就可以应用它。
.tab-panels-container { scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; overflow-x: scroll; width: 100vw; display: flex; } .tab-panel { scroll-snap-align: start; /* only supported in Chrome */ scroll-snap-stop: always; }
一个使用 React-Spring 和 React-Use-Gesture 实现的例子。
让我们来学习一下移动端基础的触摸动画,来看看有哪些深刻的见解可以被我们采用。
如果你引入了一些延迟,将会极大地破坏用户体验。会产生额外的心智负担,让用户感觉他们的行为与动画有很强的割裂感。
// 从苹果『Designing Fluid Interfaces』演讲中获得 const projection = startVelocity => (startVelocity * 0.998) / (1 - 0.998) // 使用示例 const velocityY = 1.2 // in px/ms const projectedEndPoint = projection(velocityY) // 679px
const clamp = (min, max, val) => Math.max(Math.min(val, max), min)
const rubberBand = (distance, dimension, constant = 0.55) => (distance * dimension * constant) / (dimension * constant * distance) const rubberBandClamp = (min, max, delta, constant) => delta < min ? -rubberBand(min - delta, max - min, constant) + min : delta > max ? rubberBand(delta - max, max - min, constant) + max : delta
touch-action: all;
浏览器处理所有的手势(默认)。
touch-action: none;
禁止元素在浏览器中的所有手势处理。
touch-action: pan-x;
禁止浏览器中的垂直、y 轴手势。
touch-action: pan-y;
禁止浏览器中的水平、x 轴手势。
限制自己仅使用这两个能够使用 GPU 进行加速的 CSS 属性,可以在移动设备上获得每秒 60 帧的最佳效果。
“在此时间内响应用户操作,用户会觉得效果是及时的。再过一段时间,用户行为和交互反应之间的联系就会断开。”
什么是移动端优先的动画
一些设计范式
水平滑动
我们只使用 CSS 就可以应用它。
滑动消失
一个使用 React-Spring 和 React-Use-Gesture 实现的例子。
有关触摸动画的深刻见解
让我们来学习一下移动端基础的触摸动画,来看看有哪些深刻的见解可以被我们采用。
立即响应
如果你引入了一些延迟,将会极大地破坏用户体验。会产生额外的心智负担,让用户感觉他们的行为与动画有很强的割裂感。
滚动衰减
回弹动画(Rubberbanding)
触摸取消
event.preventDefault()?
touch-action
touch-action: all;
浏览器处理所有的手势(默认)。
touch-action: none;
禁止元素在浏览器中的所有手势处理。
touch-action: pan-x;
禁止浏览器中的垂直、y 轴手势。
touch-action: pan-y;
禁止浏览器中的水平、x 轴手势。
移动端浏览器概要
性能
只使用 transform 和 opacity
限制自己仅使用这两个能够使用 GPU 进行加速的 CSS 属性,可以在移动设备上获得每秒 60 帧的最佳效果。
简化:更简单的动画意味着更好的性能
让动画开始时间保持在 100ms 以下
“在此时间内响应用户操作,用户会觉得效果是及时的。再过一段时间,用户行为和交互反应之间的联系就会断开。”
如何诊断
总结