动画

前端动画分为逐帧动画和补间动画,帧动画就是一帧帧画出来的动画,如JS动画,补间动画是设置开始和结束值即可,中间的变化由计算机自动计算填充,如过渡、C3的animation

做项目时发现使用JQ的animate()无法设置元素的旋转(rotate),后来才知道animate()只有数字值可创建动画(如margin:30px'),字符串值无法创建动画(如transform:'rotate(-90deg)')
jQuery效果-animate()方法

  • 位移transform不用加定位,但使用动画的必须是块级元素或行内块元素
  • scale的转换也是有原点的,默认是以中心为原点缩放,要改变原点的话也是和rotate一样使用transform-origin
  • 做动画的时候要分析每个节点的状态。动画播放完成状态控制,是要停在最终状态还是最初状态,默认backward表示回到原点,forward表示保持动画结束的状态
  • rotate旋转后坐标轴也会旋转,先旋转会改变坐标轴,但先位移再旋转就不会出现这种问题
  • 掐时间做延时完成动画的衔接,这种方式不好,因为上一个时间改了余下的时间都要改
    jq中利用回调函数解决了掐时间的问题,那css能不能监听动画或过渡的结束?可以
    css3中,过渡的结束用transitionend事件来监听,而动画用animationend事件来监听
  • 做动画没思路时可去Animate.css官网参考别人的源码
  • translate、scale、rotate和skew这四种常用的转换方式都是由 matrix 矩阵而来
    transform: matrix(a,b,c,d,e,f);
  • 同理,动画速度也是由贝塞尔运动曲线而来,将几个特殊的速度用英文单词表示
    animation-timing-function: cubic-bezier(0,0,0,0);
    ease,先快后慢最后非常慢
    linear,匀速
    ease-in,速度越来越快
    ease-out,速度越来越慢
    ease-in-out,速度先快后慢
  • 为什么2d转换能做的事要用3d转换来做,因为在移动端有硬件加速,使用3d转换可优化性能
  • animation和transition最好不要同时对同一元素使用,否则可能看不到效果
  • 转换(位移、缩放、旋转、倾斜)后元素的层级会变高
原文地址:https://www.cnblogs.com/Grani/p/10842022.html