定义
由许多静止的画面(帧),以一定速度(如每秒 30 张)连续播放时,肉眼因视觉残象产生错觉,而误以为是活动的画面
概念
帧:每个静止的画面都叫做帧
- 播放速度:每秒 24 帧(影视)或者每秒 30 帧(游戏)
CSS怎么优化?
JS 怎么优化?
使用 requestAnimationFrame 代替 setTimeout 或 setInterval
使用 transform 进行图形变换
概述
transform 可以实现以下几种变换:
位移(translate)
.element {/* 分开写 */transform: translateX(20px);transform: translateY(10px);/* 合起来写 */transform: translate(20px, 10px);}
绝对居中的完美答案
left: 50%;top: 50%;transform: translate(-50%,-50%);
缩放(scale)
- 用的较少,因为容易出现模糊
.element {/* 分开写 */transform: scaleX(2);transform: scaleY(.5);/* 合起来写 */transform: scale(2, .5);}
旋转(rotate)
- 一般用于 360 度旋转制作 loading
- 用到时再搜索 rotate MDN 看文档
.element {transform: rotate(25deg);}.rotateXItem{transform: rotateX(50deg);}.rotateYItem{transform: rotateY(70deg);}.rotateZItem{transform: rotateZ(100deg);}
倾斜(skew)
- 用得较少
- 用到时再搜 skew MDN) 文档
.element {transform: skewX(20deg);}
transform 多重效果
组合使用
transform: scale(0.5) translate(-100%,-100%);transfrom: none; 取消所有
使用 transform 进行动画过渡 MDN
作用
-
语法
transform:属性名 时长 过渡方式 延迟transform:left 200ms linear
- 可以用逗号分隔两个不同属性
transform:left 200ms,top 400ms
可以用 all 代表所有属性
linearease / ease-in / ease-out / ease-in-outcubic-bezierstep-start / step-end / steps
并不是所有属性都能过渡
display: none --> display: block不能过渡- 一般改成
visibility: hidden --> visibility: visible可以过渡- 可以搜索
display和visibility的区别
- 可以搜索
background颜色可以过渡吗 ?- 可以,因为可以找到过渡规律
opacity透明度可以过渡吗 ?
过渡必须要有起始
- 一般只有一次动画,或者两次
- 比如,
hover和非hover状态的过渡
使用 animation 进行动画过渡
- 标准写法
- 搜索 keyframes MDN
- 一种写法是 from to
- 另一种写法是百分数

2. 缩写语法
animation :时长 | 过渡方式 | 延迟 | 次数 | 方向 | 填充模式 | 是否暂停 | 动画名;
- 时长:1s 或者 1000ms
- 过渡方式:跟 transform 取值一样,如 linear
- 次数:3 或者 2.4 或者 infinite
- 方向:reverse | alternate | alternate-reverse
- 填充模式:none | forwards | backwards | both
- 是否暂停:paused 暂停 | running 恢复
- 以上所有属性都有对应的单独属性
/* keyframes语法1:使用from和to */@keyframes animation-name-1{from {transform: translateX(0%);}to {transform: translateY(100%);}}/* keyframes语法2:使用百分数 */@keyframes animation-name-2{0% {transform: translateX(10px);}50% {transform: translateX(50px);}100% {transform: translateY(100px);}}/* animation语法 */.someElement {/* 不相关代码 */animation: [动画名] [时长] [过渡方式] [延迟] [次数] [方向] [填充模式] [是否暂停];/* 不相关代码 */}/* 举个例子 */.someElement {/* 不相关代码 */animation: animation-name-1 5s infinite;/* 不相关代码 */}
浏览器渲染原理
参考文章
- Goole 团队写的文章
- 查看 CSS 各个属性触发什么
浏览器渲染过程
步骤
- 根据 HTML 构建 HTML 树(DOM)
- 根据 CSS 构建 CSS 树(CSSOM)
- 将两棵树合并成一颗渲染树(render tree)
- Layout 布局(文档流、盒模型、计算大小和位置)
- Paint 绘制(把边框颜色、文字颜色、阴影等画出来)
- Compose 合成(根据层叠关系展示画面)

部分资料来源:饥人谷 - 方方老师
