CSS3 animation and keyframes关键帧

关键帧--keyframes

  • 类似于flash

  • 只需指名两个状态,之间的过程由计算机自动计算

  • 关键帧的时间单位

    • 数字: 0% 25% 100%等(不写0%或100%的状态,就默认为已经设置的样式)
    • 字符: from(0%) , to(100%)
  • 格式(1)

    • @keyframes 动画名称{动画状态}
  • 格式 (2)

  • @keyframes move{from{background:red;} to {background:green};}

  • 可以只有to

animation基本使用

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>关键帧</title>
</head>
<style>
    *{margin: 0px;padding:0px;}
    @-webkit-keyframes move {
        0%{width:0px;}
        30%{width:50px;}
        50%{width:100px;}
        75%{width:150px;}
        100%{width:200px;}
    }
    @-moz-keyframes move{
        0%{width:0px;}
        30%{width:50px;}
        50%{width:100px;}
        75%{width:150px;}
        100%{width:200px;}
    }
    @keyframes move{
        0%{width:0px;}
        30%{width:50px;}
        50%{width:100px;}
        75%{width:150px;}
        100%{width:200px;}
    }
    .box{background:red;width:200px;height:30px;border:1px solid black;-webkit-animation:2s move linear;-moz-animation: 2s move linear;}
</style>
<body>
<div class="box"></div>
</body>
</html>

animation属性

-webkit-animation: 动画时间 延迟时间 动画名称 运动状态 次数 播放前重置

-webkit-animation:2s 1s move linear infinite alternate

动画播放暂停

  • animation-play-state: 播放状态(running播放和paused暂停)

播放前重置用的很少

  • alternate:动画直接从上一次挺值得位置开始执行
  • normal :动画第二次直接跳到0%的状态开始执行

animation-Js结合

  • 通过class
    • 在class里面加入animation的各种属性
    • 直接给元素加入 -webkit-animation-xxx样式
  • animation的问题
    • 写起来麻烦
    • 没办法改变目标点的位置

obj.addEventListener("webkitAnimationEnd",function(){})

走回字和鼠标暂停

效果图如下:

小球运动.gif

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='Content-Type' content="text/html; charset=utf-8">
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <title>走回字和暂停播放</title>
</head>
<style>
    *{margin:0px;padding:0px;}
    .box{width:400px;height:400px;border:1px solid black;margin:100px auto;position:relative;}
    @-webkit-keyframes move {
        25%{left:370px;top:0px;}
        50%{left:370px;top:370px;}
        75%{left:0px;top:370px;}
       100%{left:0px;top:0px;}
    }
    .box:hover .circle{-webkit-animation-play-state: paused;}
    .circle{width:30px;height:30px;background:red;border-radius: 50%;position:absolute;left:0px;top:0px;-webkit-animation: 4s 1s move infinite;}
</style>
<body>
<div class="box">
    <div class="circle"></div>
</div>
</body>
</html>

正序倒序播放

效果如下

小球运动正序或者倒叙.gif

代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='Content-Type' content="text/html; charset=utf-8">
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <title>走回字和暂停播放</title>
</head>
<style>
    *{margin:0px;padding:0px;}
    .box{width:100px;height:100px;border:1px solid black;margin:100px auto;position:relative;}
    @-webkit-keyframes move {
        25%{left:70px;top:0px;}
        50%{left:70px;top:70px;}
        75%{left:0px;top:70px;}
        100%{left:0px;top:0px;}
    }
    .box:hover .circle{-webkit-animation-play-state: paused;}
    .circle{width:30px;height:30px;background:red;border-radius: 50%;position:absolute;left:0px;top:0px;-webkit-animation: 4s 1s move infinite alternate;}
</style>
<body>
<div class="box">
    <div class="circle"></div>
</div>
</body>
</html>

处理完毕后回到默认的样式

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='Content-Type' content="text/html; charset=utf-8">
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <title>animation后面加class</title>
</head>
<style>
    *{margin:0px;padding:0px;}
    .box{width:100px;height:100px;border:1px solid black;margin:100px auto;position:relative;}
    @-webkit-keyframes move {
        0%{left:0px;top:0px;}
        25%{left:70px;top:0px;}
        50%{left:70px;top:70px;}
        75%{left:0px;top:70px;}
        100%{left:0px;top:0px;}
    }
    .circle{width:30px;height:30px;background:red;border-radius: 50%;position:absolute;left:0px;top:0px;}
    .move{-webkit-animation: 4s 1s move ; /*最后的left*/left:70px;}
    p{font-size:23px;text-align:center;}
</style>
<body>
<p>通过类名加动画效果</p>
<div class="box">
    <div class="circle move"></div>
</div>
</body>
</html>

animationed事件

效果如下

animationEnd.gif
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>配合animationEnd</title>
    <style>
        @-webkit-keyframes move {
            0% {
                width: 100px;
            }
            100% {
                width: 500px;
            }
        }
        @-moz-keyframes move {
            0% {
                width: 100px;
            }
            100% {
                width: 500px;
            }
        }
        @keyframes move {
            0% {
                width: 100px;
            }
            100% {
                width: 500px;
            }
        }
        .box {width: 100px; height: 100px; background: red;}
        .move {-webkit-animation: 2s move; -moz-animation: 2s move; animation: 2s move; width: 500px;}
        p{text-align:center;}
    </style>
</head>
<body>
<p>点击后配合animationEnd事件点击后就会变化</p>
<div class="box" id="box"></div>
<script>
    document.getElementById('box').onclick = function(){
        this.className = 'box move';
        addEnd(this, fn);
    }

    function fn(){
        alert('end');
    }

    function addEnd(obj, fn){
        obj.addEventListener('webkitAnimationEnd', fn, false);
        obj.addEventListener('animationend', fn, false);
    }
</script>
</body>
</html>

简易版本的无缝滚动

效果图

无缝滚动.gif

代码如下

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv='Content-Type' content="text/html; charset=utf-8">
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <title>简易版本的无缝滚动</title>
</head>
<style>
    *{margin:0px;padding:0px;}
    ul{list-style-type:none;}
    li{float:left;}
    #wrap{width:250px;height:50px;position:relative;bordr:1px solid #ccc;margin:100px auto;overflow: hidden;}
    #wrap ul{position:absolute;left:0px;top:0px;height:50px;width:500px;-webkit-animation: 3s 1s move infinite;}
    #wrap ul li {width:50px;height:50px;font:24px/50px "微软雅黑";background:black;color:#ffffff;text-align:center;}
    @-webkit-keyframes move {
        0%{
            left:0px;
        }
        100%{left:-250px;}/*走的距离就是盒子的宽度*/
    }
    #wrap:hover ul{-webkit-animation-play-state: paused;}
</style>
<body>
<div id="wrap">
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
</div>
</body>
</html>

以上CSS3 animation 知识点全部完毕

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容