CSS3动画效果之animation
先解决上一篇的遗留问题。
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
这样定义的动画,实际情况是只跑一次,无论鼠标悬浮还是移出都不会再次启动动画。
why?因为transition和animation的工作模式是不同的,transition可以理解为监听器,一旦触发即启动。而animation则可以理解为命令,当时有效,执行完后作废,除非再下命令。
那这样是否有效呢?
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s;
}
div:hover {
-webkit-animation: test1 2s;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
结果还是无效,但是
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s;
}
div:hover {
-webkit-animation: test2 2s;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
@-webkit-keyframes test2 {
from {background-color: green;}
to {background-color: red;}
}
这样就有效了。
上面两个例子的区别说明了:
- animation执行完后不是作废了,而是处于end的状态
- 状态跟随animation-name,只有animation-name改变时,状态才初始化
好了,弄清楚了animation和transition最核心的区别,然后来看animation中的所有属性。用上一篇的代码作为初始代码:
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s forwards;
}
div:hover {
-webkit-animation: test2 2s forwards;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
@-webkit-keyframes test2 {
from {background-color: red;}
to {background-color: green;}
}
animation同样是很多属性的缩写:
- animation-name: 对应keyframes的name,keyframes的定义遵循 percentage {css property...},其中from为0%,to为100%
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s forwards;
}
div:hover {
-webkit-animation: test2 2s forwards;
}
@-webkit-keyframes test1 {
from {background-color: green; width: 500px;}
to {background-color: red; width: 300px;}
}
@-webkit-keyframes test2 {
from {background-color: red; width: 300px;}
to {background-color: green; width: 500px;}
}与transition表现不同的是,当动画进行的中途改变鼠标悬浮/移出的状态时,元素会先切换到最终的状态也就是新动画初始的状态再执行新动画。而不像transition一样平滑以当前的状态作为开始状态执行新动画。这是因为animation与元素当前的状态毫无关联,只按照keyframes的定义执行动画,而transition只以状态的改变触发的,所以跟元素当前的状态关联密切。
- animation-duration: 动画执行的时间。
- animation-timing-function: 动画执行的方式。
- animation-delay: 动画延迟执行的时间。
以上三个同transition,可以看出两者的设计思想是类似的,但animation无疑更复杂,因为它还有 - animation-iteration-count: number | infinite 动画执行的次数n,当然总时间就是animation-durationn * n了
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s forwards 2;
}
div:hover {
-webkit-animation: test2 2s forwards 2;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
@-webkit-keyframes test2 {
from {background-color: red;}
to {background-color: green;}
}页面加载时元素由绿慢慢变红,然后立即变绿,最后再次慢慢由绿变红,动画进行了两次,但立即变绿很不平滑。这就要看下面这个属性
- animation-direction: normal(default) / alternate: 当执行次数为偶数时,反转关键帧进行动画
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s forwards 3 alternate;
}
div:hover {
-webkit-animation: test2 2s forwards 3 alternate;
}
@-webkit-keyframes test1 {
from {background-color: green;}
to {background-color: red;}
}
@-webkit-keyframes test2 {
from {background-color: red;}
to {background-color: green;}
}元素由绿慢慢变红,然后由红慢慢变绿,最后由绿慢慢变红,动画进行了三次,而且都很平滑。
- animation-fill-mode: 定义动画启动前的delay时间内,和动画完成后的时间内元素的CSS属性。none(default) delay时间内和完成后都使用元素本来的样式,与keyframes毫无关联 | forwards delay时间内使用本来的样式,完成后使用最后一帧的样式 | backwards delay时使用第一帧的样式,完成后使用本来的样式 | both delay时间内和完成后分别使用第一帧和最后一帧的样式
div {
width: 300px;
height: 200px;
background-color: red;
/* 将none分别替换成forwards、backwards、both */
-webkit-animation: test1 2s 2s none;
}
@-webkit-keyframes test1 {
from {background-color: blue;}
to {background-color: black;}
} - animation-play-state: 规定动画暂停或运行 running(default) | paused 暂停动画。比如先定义动画,然后想在鼠标悬浮的时候再执行。
div {
width: 300px;
height: 200px;
background-color: red;
-webkit-animation: test1 2s forwards paused;
}
div:hover {
-webkit-animation-play-state: running;
}
@-webkit-keyframes test1 {
from {background-color: red;}
to {background-color: green;}
}
还有,animation emit的事件比transition多一个。
总共有三个事件:
- animationstart: 动画正式开始,要等delay的时间过去
- animationend: 动画正式结束,所有animation-iteration-count执行结束
- animationiteration: 动画重新播放时
这三个事件没有被浏览器支持,取而代之是webkit下的webkitAnimationStart、webkitAnimationEnd、webkitAnimationEnd(注意大写字母)。简单的实现如下:
(function setup() {
var e = document.getElementsByTagName("div")[0];
e.addEventListener("webkitAnimationStart", listener, false);
e.addEventListener("webkitAnimationEnd", listener, false);
e.addEventListener("webkitAnimationIteration", listener, false);
})();
function listener(e) {
var l = document.createElement("li");
switch(e.type) {
case "animationstart":
case "webkitAnimationStart":
console.log("animation start");
break;
case "animationend":
case "webkitAnimationEnd":
console.log("animation end");
break;
case "animationiteration":
case "webkitAnimationIteration":
console.log("animation restart");
break;
}
}
以上。
CSS3动画效果之animation的更多相关文章
- 鼠标悬停css3动画效果
下载Demo 效果预览 html: <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- CSS自学笔记(14):CSS3动画效果
在CSS3中也新增了一些能够对元素创建动画处理的属性.通过这些新增的属性,我们可以实现元素从一种样式变换成另一种样式时为元素添加动态效果,我们就可以取代网页中的动态图片.flash动画和JavaScr ...
- 第八十三节,CSS3动画效果
CSS3动画效果 学习要点: 1.动画简介 2.属性详解 3.简写和版本 本章主要探讨HTML5中CSS3的动画效果,可以通过类 Flash那样的关键帧模式控制运行. 一.动画简介 CSS3提 ...
- CSS3动画效果——js调用css动画属性并回调处理详解
http://www.jb51.net/css/258407.html 这篇文章主要详细介绍了CSS3动画效果回调处理,需要的朋友可以参考下 我们在做js动画的时候,很多时候都需要做回调处理,如在一个 ...
- 35个让人惊讶的CSS3动画效果
1. Pure CSS Coke Can 2. Colorful Clock 3. jQuery DJ Hero 4. Animated Pricing Column 5. Slick jQuery ...
- Css3动画效果,彩色文字效果,超简单的loveHeart
<!DOCTYPE html><html><head><meta charset="utf-8" /><title>Cs ...
- Bounce.js – 快速创建漂亮的 CSS3 动画效果
Bounce.js 是一个用于制作漂亮的 CSS3 关键帧动画的 JavaScript 库,使用其特有的方式生成的动画效果.只需添加一个组件,选择预设,然后你就可以得到一个短网址或者导出为 CSS 代 ...
- CSS3 动画效果带来的bug
css3 动画效果比如transition:all 2s linear;这种用来计算及时的物体坐标的话会带来一定的问题 比如把一个DIV从A点移动到B点.JS为DIV.style.left=B; 但是 ...
- animate.css 一些常用的CSS3动画效果
大家已经开始在项目中使用一些CSS3动画效果了吧,这让网站在高端浏览器上看起来很上流.animate.css是一个老外做的各种CSS3动画的合集,比较全,也很炫,大家可以参考学习一下. 项目主页:ht ...
随机推荐
- Nagios部署与配置
Nagos是一款开源电脑系统和网络监视工具,能够有效监控windows,linux,Uninx的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员 ...
- 自定义Git之配置别名
有没有经常敲错命令?比如git status?status这个单词真心不好记. 如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的. 我们只需要敲一行命令,告 ...
- NYOJ--45--棋盘覆盖(大数)
棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...
- HDU--1003 Max Sum(最大连续子序列和)
Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum ...
- javascript的词法作用域
这个概念是js中相当基础也是极为重要的,很多想当然的错误或感觉怪异的问题都是和这个东西有关.所以,本文主要说下这个名词的概念以及讨论下他牵扯出来的有关变量.函数.闭包的问题. 由变量开始谈 习惯性先来 ...
- ASP.NET Core身份验证服务框架IdentityServer4-整体介绍
一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...
- MySQL表空间集
--MySQL表空间集 ----------------------2014-09-20 1. 收缩ibdata的方法,目前MySQL依然没有提供收缩ibdata的方法,只能重构,下面是5.7的步骤. ...
- Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...
- Gate One
运维堡垒机介绍: 运维堡垒机的理念起源于跳板机.2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机.跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台 ...
- 安卓APP测试容易忽略的地方
我们手机APP测试,主要针对的是android和ios两大主流操作系统,总体上来说android手机型号.版本多,bug也多:ios相对bug少.下面就针对Android说一下最容易忽略的测试点吧. ...