一个栗子上手CSS3动画

最近杂七杂八的事情很多,很多知识都没来得及总结,是时候总结总结,开启新的篇章~

本篇文章不一一列举CSS3动画的属性,若需要了解API,可前往MDN

在开始栗子前,我们先补补基础知识。

css3动画分类:

  • 补间动画 – 具有连贯性的动画  
  • 逐帧动画 – 使用steps过渡方式实现跳跃 

animation常用属性及场景:

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

1. timing-function属性:  

  • ease 规定慢速开始,然后变快,然后慢速结束的过渡效果。
  • ease-in 规定以慢速开始的过渡效果。
  • ease-out 规定以慢速结束的过渡效果。
  • ease-in-out 规定以慢速开始和结束的过渡效果。
  • linear 动画从头到尾的速度是相同的。
  • cubic-bezier(n,n,n,n) 在cubic-bezier函数中自己的值,n取值为0~1
  • steps()

2. delay属性:用于将动画与其他动画的执行时机错开,将动画落到不同的时间点。这个属性很好用~

动画原则:

  1. 运动一般有个惯性,所以要先快后有一个慢一点的反弹。
  2. 背景若使用多个星星闪烁,错位闪烁

配合JS使用

slide.addEventListener("webkitAnimationEnd", function() {
   console.log(‘eeee‘) //动画结束再调用
});

有些情况我们需要确保动画结束后再进行另外一些交互,可使用该事件监听。



实战演习:

假如我们需要实现一个这样简单的动画:

仔细观察上面的动画,我们发现,它可以由以下3部分组成:

1. 入场动画——从右往左移动

2. 左右循环移动

3. 逐帧动画

实现方法:

使用3个dom元素,最外层dom实现入场动画,第二层dom实现左右移动,第三层dom实现逐帧动画。

优点:调试方便,节省时间。

缺点:dom多。

1. dom结构

<div class="anima_entrance">
    <div class="anima_move">
        <div class="anima_sprite"></div>
    </div>
</div>

2. 分析动画形成的时间轴:

入场动画持续0.6s,只播放一次,左右移动以及逐帧动画持续2s,循环播放,代码如下:

.anima_entrance {
    animation: anima_entrance .6s ease-in-out both;
}

.anima_move {
    animation: anima_move 2s linear .6s infinite both;
}

.anima_sprite {
    animation: anima_sprite 2s step-end .6s infinite both;
}

3. 使用steps()实现逐帧动画:

使用下面这张雪碧图,通过改变background-position实现动画切换。

蹬蹬蹬,效果如下面所示,是不是很失望??

原因:由于animation默认以ease方式过渡,它会在每个关键帧之间插入补间动画,所以动画效果是连贯性的。此时可以使用steps()取消补间动画。

贴一个图:

  • steps(1,start): 动画一开始就跳到 100% 直到这一帧(不是整个周期)结束   == step-start
  • steps(1,end): 保持 0% 的样式直到这一帧(不是整个周期)结束   == step-end

接着,我们将timing-function改成 step-end,效果如下:

animation: sprite 2s step-end .6s infinite both;

出现想要的效果了哈~不错。

完整的css代码如下:

 1 .anima_entrance {
 2     position: absolute;
 3     z-index: 3;
 4     top: 5.1rem;
 5     left: 4.05rem;
 6     width: 12.9rem;
 7     height: 19.1rem;
 8     -webkit-animation: anima_entrance .6s ease-in-out both;
 9     animation: anima_entrance .6s ease-in-out both;
10 }
11
12 .anima_move {
13     width: 218px;
14     height: 382px;
15     position: absolute;
16     z-index: 1;
17     top: 0;
18     left: 42px;
19     -webkit-animation: anima_move 2s linear .6s infinite both;
20     animation: anima_move 2s linear .6s infinite both;
21 }
22
23 .anima_sprite {
24     width: 218px;
25     height: 382px;
26     background: url(demo.png) no-repeat 0 0;
27     background-size: 25.8rem 19.1rem;
28     -webkit-animation: anima_sprite 2s step-end .6s infinite both;
29     animation: anima_sprite 2s step-end .6s infinite both;
30 }
31
32 @keyframes anima_entrance {
33     0% {
34         -webkit-transform: translate3d(18.75rem, 0, 0);
35         transform: translate3d(18.75rem, 0, 0);
36     }
37     100% {
38         -webkit-transform: translate3d(0, 0, 0);
39         transform: translate3d(0, 0, 0);
40     }
41 }
42
43 @keyframes anima_move {
44     0%, 16%, 42%, 74%, 100% {
45         -webkit-transform: translate3d(0, 0, 0);
46         transform: translate3d(0, 0, 0);
47     }
48     29% {
49         -webkit-transform: translate3d(-1rem, 0, 0);
50         transform: translate3d(-1rem, 0, 0);
51     }
52     87% {
53         -webkit-transform: translate3d(1rem, 0, 0);
54         transform: translate3d(1rem, 0, 0);
55     }
56 }
57
58 @keyframes anima_sprite {
59     0%, 16%, 42%, 58%, 74%, 100% {
60         background-position: -12.9rem 0;
61     }
62     8%, 50%, 66% {
63         background-position: 0 0;
64     }
65 }

时间: 2024-08-08 09:30:36

一个栗子上手CSS3动画的相关文章

纯CSS3动画实现小黄人

先上效果: http://2.danielcv.sinaapp.com/sae/minimon/index.html 要实现这个效果其实并不难,主要是对一些CSS3特性的实质性应用,比如transform,transition还有relative,absolute定位的使用方法, 在搭建好 <div class="wrapper"> <div class="littleH"> <div class="bodyH"&g

CSS3动画帧数科学计算法http://tid.tenpay.com/?p=5983

总结都浓缩在这个工具里了,想知道工具的地址或想窥探工具诞生的趣事请往下看 . —————————————————————–     华丽丽的开篇     —————————————————————- 本篇文章来自腾讯内部饭卡充值改版项目的CSS3动画经验总结.虽然你们访问不到我们的饭卡站点,不过可以小窥一下我们的动画示例哟. (请使用chrome.safari或firefox浏览器看效果,效果地址) 实现上面“嘀卡萌风骚乱舞”的动画,比较麻烦的是,要凭感觉自己算参数写代码,重复试个千百回,才能达

demo: 全页面CSS3动画的一个参考例子

全页面CSS3动画的一个参考例子: http://wow.blizzard.cn/wow/wod-achievement/ 魔兽的一个活动页 第二页.第三页,文字进入页面 <script src="http://cdn.bootcss.com/jquery/1.12.1/jquery.min.js"></script> <input type="button" value="3屏显示" id="btn31&

css3动画划过有一个框

css3动画:开始给图片加了个透明度opacity:0.9,给figure最外面容器加和图片颜色相近的背景色,比如这个加的是黑色,给div最开始加个旋转0度,划过360度,文字刚开始透明度0,划过透明度1 代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style&g

Bootstrap 轮播加上css3动画,炫酷到底!

对于网站开发者来说,对展示内容增加一个滑动或者是轮播效果的是非常常见的需求.收费和免费的轮播插件多的是不胜枚举.其中很多提供很多有用的配置选项和动态效果. 很多时候,如果你的项目需要的是一个轻量级的轮播,不需要很多的功能.同时你的项目是采用Bootstrap,(一个最流行的开源前端框架)的话.你可以参考一下bootstrap官方组件. 这篇文章将展示如何在 Bootstrap轮播上添加有趣的动画效果.同时确保这个js组件自由扩展和快速上手. 介绍Animate.css 为了让我自己写的动画效果值

学习CSS3动画(animation)

CSS3就是出了不少高大上的功能,3D效果.动画.多列等等.今天写篇文章记录怎么一下怎么用CSS3写一个动画. 丑话还得说前头,IE9以及以下版本不支持CSS3动画(如真要实现可以考虑用js,不过估计效果也不太好).chrome和safafi建议加上前缀-webkit-以向前兼容老版本.   今天简单的做一个动画. 首先,先简单画一个div,然后添上背景图片. <body> <div class="demo"> 我是demo </div> </

CSS3学习(CSS3过渡、CSS3动画)

CSS3过渡:transition属性--专门应对颜色.长度.宽度.位置等变化的过渡 通过CSS3,我们可以在不使用Flash和JavaScript的情况下,为当前某元素从某样式改变为某样式的时候添加过渡效果.我们仅仅使用到了一个transition属性,专门来写过渡从一个样式到另一个样式过渡时所花费的时间,以秒为单位.若时长不规定,默认为0,即没有过渡时间.在使用这个过渡效果的时候,我们使用了类似于超链接的l(link).v(visited).h(hover).a(active)样式的控制.此

css3动画--边框线条动画

网上看到一个css3动画,地址 最开始思路是,里面一个DIV方块,右上角一个同样大小的div1,向上,向右平移8px,设div1的border-top,border-right值形成,如图所示 再用clip截取一半,形成半折角. 同理左下角建一个div,向左.向下平移8px,设border-left,border-bottom值,用clip截取形成 <div class="cont"> <div class="bb"></div>

css3动画animate.css的使用

简介 animate.css 是一个来自国外的 CSS3 动画库,它预设了抖动(shake).闪烁(flash).弹跳(bounce).翻转(flip).旋转(rotateIn/rotateOut).淡入淡出(fadeIn/fadeOut)等多达 60 多种动画效果,几乎包含了所有常见的动画效果. 虽然借助 animate.css 能够很方便.快速的制作 CSS3 动画效果,但还是建议看看 animate.css 的代码,也许你能从中学到一些东西. 在使用animate.css的时候通常都会搭配