博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
animation
阅读量:6527 次
发布时间:2019-06-24

本文共 3488 字,大约阅读时间需要 11 分钟。

一、基本语法

 

animation: name duration timing-function delay iteration-count direction;

 

 

这是html代码(一张200*200的图片):

 

 

1.1、首先你得定义一个动画的名字(name) 和 动画的持续时间(duration)

 

img:hover{
animation: change 1s;}

 

上面代码表示,当鼠标悬停在这张图片上时,会生成一个叫做change的动画,持续时间为1秒,接下来,我们需要用keyframes关键字,定义change动画

  1. @keyframes change{
    0%{ width: 200px; } 50%{
    width: 400px; } 100%{
    width: 200px; } }

上面代码表示change动画一共有3个状态,分别为起始(0%)、中间点(50%)、结束(100%),如果有需要可以插入更多状态。

运行过后,会发现鼠标悬停图片上,图片先变为400像素宽,紧接着变回200像素宽,整个动画持续1秒钟。

 

1.2、timing-function

这个属性规定整个动画执行的速度曲线

  • linear  动画从头到尾的速度都是相同的
  • ease   动画以低速开始,然后加快,在结束前变慢(默认)
  • ease-in 动画以低速开始
  • ease-out 动画以低速结束
  • ease-in-out 动画以低速开始和结束
  • cubic-bezier(n,n,n,n)  在 cubic-bezier 函数中自己的值。可能的值是从 0 到 1 的数值。
img:hover{
animation: change 1s linear;}

上面的代码我在后面加了个linear的值,表示整个动画将匀速运行。

 

1.3、delay

这个属性规定动画开始之前的延迟

img:hover{
animation: change 1s linear 1s;}

上面的代码加了个1s的值,表示延迟1秒钟后开始执行,默认值为0,不延迟。

 

1.4、iteration-count

这个属性规定了动画执行的次数,默认为1次,如有需要,可以明确指出次数或者无限次数执行(infinite

 

img:hover{
animation: change 1s linear 1s 3;}

 

上面的代码添加了iteration-count属性值为3次,整个动画将不间断运行3次,然后停止。

 

1.5、direction

这个属性规定了是否要轮流反向播放动画,如果值为alternate,则动画会在奇数次数(1、3、5...)正常运行,而在偶数次数(2、4、6...)向后播放,举栗:

@keyframes change{
0%{ width: 200px; } 100%{
width: 400px; }}

将之前的change动画改为如上,如果此时无限执行次数的话,会发现,动画由200像素,缓慢变化到400像素,然后跳到200像素,再重复。这里是由400像素宽跳到200像素宽,很突然,此时,可以加上属性direction,并赋值为alternate,偶数次数,就会反向执行,整个动画流畅。

img:hover{
animation: change 1s infinite alternate;}

如果执行次数是一次,该属性没效果。

 

补充:

1、nimation-fill-mode

一般动画结束以后,会立即从结束状态跳到结束状态,如果想让动画停留在结束位置,就可以使用这个属性。值为forwards

 

img:hover{
animation: change 1s forwards;}

 

现在这个动画即使执行一次,完毕并不会跳到开始状态,而是停留在结束状态。

 

2、简写方式

上述是采用简写方式

img:hover{
animation: change 1s linear 1s 3 alternate forwards;}

其实可以分解成各个单独的属性:

img:hover{
animation-name:change; animation-duration: 1s; animation-timing-function:linear; animation-delay: 1s; animation-iteration-count:3; animation-direction:alternate; animation-fill-mode: forwards; }

 

3、keyframes的写法

keyframes关键字用来定义动画的各个状态,它的写法相当自由:

@keyframes change{
0%{ width: 200px; } 50%{
width: 300px; } 100%{
width: 400px; }}

其中0%可以用from表示,100%可以用to表示,因此上面的代码可以写成:

@keyframes change{
from{ width: 200px; } 50%{
width: 300px; } to{
width: 400px; }}

另外,浏览器从一个状态过渡到另一个状态,是平滑过渡,可以用steps函数实现分布过渡:

animation: change 1s steps(10);

 

4、animation-play-state

有时动画播放过程中,会突然停止,这是,默认行为是立即跳到开始状态。

比如我这里让鼠标移入图片自己旋转:

img:hover{
animation: change 1s infinite;}@keyframes change{
from{ transform: rotateZ(0deg); } to{
transform: rotateZ(360deg); }}

正常情况下,我设置了无限次数,鼠标放在图片上时一直旋转的,但是突然离开,他就会道原始状态。

这里改变一下:

img{
animation: change 1s infinite; animation-play-state: paused; }img:hover{
animation-play-state: running; }@keyframes change{
from{ transform: rotateZ(0deg); } to{
transform: rotateZ(360deg); }}

上面代码定义了一个动画,默认状态是暂停的,鼠标移入才开始执行,离开就暂停。突然离开,会变成:

 

7、浏览器前缀

目前,ie10+、firefox、欧朋浏览器支持没有前缀的animation。而Safari 和 Chrome则需要添加 -webkit- 前缀,也就是说,在实际的项目中,必须写成下面这样子:

img:hover{
animation: change 1s; -webkit-animation: change 1s;}@keyframes change{
from{ transform: rotateZ(0deg); } to{
transform: rotateZ(360deg); }}@-webkit-keyframes change{
from{ transform: rotateZ(0deg); } to{
transform: rotateZ(360deg); }}

 

转载于:https://www.cnblogs.com/xlj-code/p/6108540.html

你可能感兴趣的文章
《网站性能监测与优化》一2.4 软件服务应用网站
查看>>
《HTML5 开发实例大全》——1.26 使用鼠标光标拖动网页中的文字
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
【转载】WinCE6.0 Camera驱动源码分析(二)
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>
[AX]乐观并发控制Optimistic Concurrency Control
查看>>
自定义类加载器
查看>>
MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)
查看>>
C++构造函数例程
查看>>
把某一列值转换为逗号分隔字符串
查看>>
DLL,DML,DCL,TCL in Oracle
查看>>
android之存储篇_存储方式总览
查看>>
SSE指令集学习:Compiler Intrinsic
查看>>