# base-animation
**Repository Path**: lisa_zhu2012/base-animation
## Basic Information
- **Project Name**: base-animation
- **Description**: CSS3动画研发学习
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-10-13
- **Last Updated**: 2023-08-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# base-animation
[学习视频](https://www.bilibili.com/video/BV1ma4y1s7A7?p=4&spm_id_from=pageDriver)
## 介绍
CSS3动画研发学习
哪些动画会产生效果?有中间值,没有会直接变化。
> 不能产生效果:属性值:auto border-style: xxx
学习CSS3动画的意义
1. 开发周期短;
2. 增加浏览页面的趣味性(和用户交互,让用户有更好的体验);
3. 增加用户视觉冲击力(更好的视觉效果和视觉体验,人是视觉动物)。
### 动画是什么?
动画片、漫画、视频、flash等等会动的画面都是动画;
颜色高度等属性的变化(过渡)也是动画;
我们css3对于动画的实现有过渡和帧动画。
> 电视播放标准是25帧每秒,人眼舒适放松时可视帧数是每秒24帧,集中精神时不超过30帧。眨眼时睁开眼瞬间可以捕捉到的帧数是30帧以上......
**CSS3动画包括transition和animation;**
**动画常常和transform属性常用;**
**值得注意的是,transform并不是动画属性,但是他在为我们动画的出现做出了杰出的贡献。**
transform 属性应用于元素的2D或3D转换。属于静态类
transform 主动开启浏览器的渲染加速,使动画更加细腻;该属性实现动画过程中不会改变文档流结构(不会触发重绘操作);
### CSS3动画的发展和应用
#### CSS3动画的发展(效果)
IE10 2012-09-04
Chrome 4 2010-01-25 -webkit
FireFox 5 2011-01-25
#### CSS3动画的发展(事件)
> IE10 效果和事件不是同一时间支持
IE10 2012-10-17
Chrome 4 2010-01-25
FireFox 5 2011-01-25
#### CSS3动画的应用
CSS3动画做一些功能性的菜单按钮
宣传用的轮播图,各种页面效果的缓冲
页面间的切换过渡,网页小游戏
#### CSS3动画之基
vue-transition swiper svg animate.css
### 学习CSS3动画的目标和必备技能
#### 学习CSS3动画的目标
第一阶段:熟练使用 transition 和 animation 中的 name during
第二阶段:一法同,百法通。动画库拿来就用,通过观察其它动画有好的实现方案
第三阶段:复杂动画的开发和实现
#### 学习CSS3动画的必备基础
CSS3新属性和其它CSS3静态属性
Chrome浏览器调用工具
JS基本的API,例如属性选择、事件监听
## 前言
写动画前期一定要善于学习别人的思路
在借鉴前,最好先自己脑洞下自己的思路
善于对比和总结,因为这真的是一个学起来简单,做起来难的属性
## transition 基础写法&一些经验
### [transition 基础和写法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions)
* 属性名称(property)
* 过渡时长(duration)
* 时间函数(timing-function)
* 延迟时长(delay)
```
div {
transition: ;
}
```
### transition 简单运用
> 1_transition.html
1. 过渡时间 延迟时间;
2. 时间函数改变动画的速度;
触发过渡
单纯的代码不会触发任何过渡操作,需要通过用户的行为(如点击,悬浮等)触发,
可触发的方式有::hover :focus :checked 媒体查询触发 JavaScript触发
局限性
transition的优点在于简单易用,但是它有几个很大的局限:
(1)transition需要事件触发,所以没法在网页加载时自动发生(文档流属性发生变化,才会过渡,而且文档流一定要有个初始)。
(2)transition是一次性的,不能重复发生,除非一再触发。
(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
CSS Animation就是为了解决这些问题而提出的。
注意:
- display 不能和 transition 一起使用
> display: none;浏览器文档流预设好了,但不能读出这个属性值,display: block;后,transition读的是瞬间属性值,没有中间值,所以没有变化
- transition 后面尽量不要跟all
> 会把添加的所有属性看一遍,会造成GPU损耗,影响读取速度和页面流畅性
- 常见闪动 可以用 perspective和backface-visibility(等3D元素)
## animation 基础写法&一些经验
### [animation 基础写法](https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation)
* 动画名称(name)-- @keyframes
* 过渡时长(duration)
* 时间函数(timing-function)
* 延迟时长(delay)
* 播放次数(iteration-count)
> iteration 迭代
infinite:无限循环播放动画;
:动画播放的次数;默认值为1。可以用小数定义循环,来播放动画周期的一部分:例如,0.5 将播放到动画周期的一半。不可为负值。
* 播放方向(direction)
是否轮流播放和反向播放 normal | reverse | alternate(交替) | alternate-reverse
> alternate 缓慢的恢复到初始
* 停止播放的状态(fill-mode)
none | forwards | backwards | both
forwards:目标将保留由执行期间遇到的最后一个关键帧计算值。 最后一个关键帧取决于animation-direction和animation-iteration-count的值:
> 结束时是最后一帧状态
| animation-direction | animation-iteration-count | last keyframe encountered |
| ---- | ---- | ---- |
|normal| even or odd |100% or to|
|reverse| even or odd | 0% or from|
|alternate| even| 0% or from|
|alternate| odd| 100% or to|
|alternate-reverse| even| 100% or to|
|alternate-reverse| odd| 0% or from|
backwards:动画将在应用于目标时立即应用**第一个关键帧中定义的值**,并在animation-delay期间保留此值。 第一个关键帧取决于animation-direction的值:
> 延迟前就是 第一帧状态
| animation-direction | first relevant keyframe |
| ---- | ---- |
|normal or alternate| 0% or from|
|reverse or alternate-reverse| 100% or to|
* 是否暂停(play-state)
running | paused
```css
animation: name duration timing-function delay iteration-count direction fill-mode;
/* 如果
animation-name: name1, name2, name3;
animation-iteration-count: infinite, 2;
name3并没有对应的值,这样会从头开始; */
```
### animation 简单运用
> 1_animation.html
1. animation 适用场景 跑马灯,loading,帧动画...
2. animation 解决 transition display: none bug
## 时间函数与js监听
时间函数分线性和非线性
善于对比和总结,多看demo,在其中找到答案
### 时间函数
**animation-timing-function 是作用在每个 keyframe 关键帧上的**
#### 时间函数-线性
时间函数,管理着动画在单位帧内播放的速度曲线
它使用的是名为 三次贝塞尔函数的数学函数
预设值 linear ease ease-in ease-out ease-in-out
cubic-bezier(n,n,n,n)
> x1,y1,x2,y2
#### 时间函数-非线性
能够实现动画的阶跃式变化,不是线性的过渡
steps(1, start|end)
**steps作用的是每个关键帧,而不是整个时间**
> ps:0% 50%
> 帧——就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。 一帧就是一幅静止的画面,连续的帧就形成动画,如电视图象等。 我们通常说帧数,简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。
### 过渡和动画在js中的监听
animationstart
animationend、transitionend
animationiteration
#### 监听的事件(兼容)
* 在360,safari和部分chrome下需要这样webkitAnimationEnd
* IE和firebox已经做了兼容可以直接写
## 其它
transform:translate3d(0,0,0)可以触发硬件加速,CSS3提供的3D效果,属性都会开启GPU硬件加速模式,从而让浏览器在渲染动画时从CPU转向GPU。
色板:https://flatuicolors.com/
# SVG
SVG (Scalable Vector Graphics): 可缩放的矢量图形,使用XML格式定义图像。
* 优势:
SVG是矢量图形文件,无限放大不失真。
可以用CSS样式来自由定义图标颜色,比如颜色/尺寸等效果。
所有的SVG可以全部在一个文件中,节省HTTP请求 。
使用SMIL、CSS或者是javascript可以制作充满灵性的交互动画和滤镜效果。
由于SVG也是一种XML节点的文件,所以可以使用gzip的方式把文件压缩到很小。
* 缺点:对CPU消耗比较,图片越大,绘制占用的CUP资源越多。官方建议不超过200dp*200dp
同样高清的质地,矢量图不畏惧放大,体积小。这里要说明一点就是,因为 SVG 中保存的是点、线、面的信息,与分辨率和图形大小无关,只是跟图像的复杂程度有关,所以图像文件所占的存储空间通常会比 png 小。
svg 插图:https://undraw.co/illustrations
实验中的功能:使用对象边界框作为参考盒子。
transform-box: fill-box;
SVGPathElement.getTotalLength() 该方法返回用户代理对路径总长度(以用户单位为单位)的计算值。
filter: none | blur() | brightness() | contrast() | drop-shadow() | grayscale() | hue-rotate() | invert() | opacity() | saturate() | sepia() | url();
filter 滤镜的 hue-rotate 色调旋转
## 公众号SVG动画排版基础
visualstudio下载地址:https://code.visualstudio.com
事件穿透:pointer-events: none
### 自适应宽度伸长动画原理
> https://mp.weixin.qq.com/s/WhTd4T84iJIs2JeYdDvsSA
> https://mp.weixin.qq.com/s/lxh4U6NGrklTkap03ppZzQ
```
触发器SVG
viewBox 750x750 宽高比 750/800
```