• css3系列之animation


    在上次博文中已经讲了transition,其实animation与transition功能相同,都是通过改变元素
    的属性来实现动画效果的。但是它们也有区别:transition是只能通过改变指定属性的开始值
    与结束值,然后在这两个属性值之间进行平滑过渡的方式来实现动画效果。animation却可以通
    过定义多个关键帧以及每个关键帧中元素的属性值来实现更为复杂的动画效果。

    语法

    animation: name duration timing-function delay iteration-count direction;
    描述
    animation-name 规定需要绑定到选择器的 keyframe 名称。
    animation-duration 规定完成动画所花费的时间,以秒或毫秒计。
    animation-timing-function 规定动画的速度曲线。
    animation-delay 规定在动画开始之前的延迟。
    animation-iteration-count 规定动画应该播放的次数。(infinite无限轮播
    animation-direction 规定是否应该轮流反向播放动画。


    有理论不实践,那是纸上谈兵。下面让我们动手写一个简单的示例吧。

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title> animation </title>
        <style type="text/css">
        /**/
        div {margin:20px 0;}
        #animate_1 {position:absolute; background-color:red;top:100px;width:500px;}
        @-webkit-keyframes mycolor {
            0% {
                background-color:red;
            }
            40% {
                background-color:darkblue;
            }
            70% {
                background-color:yellow;
            }
            100% {
                background-color:red;
            }
        
        }
        #animate_1:hover{
            -webkit-animation: mycolor 5s linear infinite
        }
    
        </style>
    </head>
    <body>
        <div id="animate_1">animation_1</div>
    </body>
    </html>

    看到了吧,上面的背景色变换,只需要通过animation的几个关键帧来实现动画的效果

    当然animation可以同时改变多个属性值来实现比较复杂的动画效果。

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title> animation </title>
        <style type="text/css">
        /**/
        div {margin:20px 0;}
        #animate_1 {position:absolute; background-color:red;top:100px;width:500px;}
        @-webkit-keyframes mycolor {
            0% {
                background-color:red;
                -webkit-transform: rotate(0deg);
            }
            40% {
                background-color:darkblue;
                -webkit-transform: rotate(30deg);
            }
            70% {
                background-color:yellow;
                -webkit-transform: rotate(-30deg);
            }
            100% {
                background-color:red;
                -webkit-transform:rotate(0deg);
            }
        
        }
        #animate_1:hover{
            -webkit-animation: mycolor 5s linear infinite
        }
        
        </style>
    </head>
    <body>
        <div id="animate_1">animation_1</div>
    </body>
    </html>

    效果是不是很酷,只要通过css就可以实现背景变色及元素变换角度。在过去那是实现这个效果
    可就疯狂的写一大堆的javascript代码了。

    下面说下实现动画的方法

    animation-timing-function 规定动画的速度曲线。

    语法

    animation-timing-function: value;
    描述
    linear 动画从头到尾的速度是相同的。
    ease 默认。动画以低速开始,然后加快,在结束前变慢。
    ease-in 动画以低速开始。
    动画以低速开始。 动画以低速结束。
    ease-in-out 动画以低速开始和结束。
    cubic-bezier(n,n,n,n)

    在 cubic-bezier 函数中设置自己的值。可能的值是从 0 到 1 的数值。

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title> animation </title>
        <style type="text/css">
        /**/
        div {margin:20px 0;}
        @-webkit-keyframes myanimate_2 {
            0% {
                width:100px;
                height:100px;
            }
            100% {
                width:500px;
                height:500px;
            }
        }
        #animate_2 {
            width:500px;
            height:500px;
            background-color:red;
            -webkit-animation:myanimate_2 5s ease-out;
        }
        
        @-webkit-keyframes fadein {
            0% {
                opacity:0;
                background-color:white;
            }
            100% {
                opacity:1;
                background-color:white;
            }
        }
        </style>
    </head>
    <body>
        <div id="animate_2">animation_2</div>
    </body>
    </html>

    最后一个例子实现一个网站经常用到的动画效果--网页的淡入效果。

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title> animation </title>
        <style type="text/css">
        /**/
        div {margin:20px 0;}
        
        @-webkit-keyframes fadein {
            0% {
                opacity:0;
                background-color:white;
            }
            100% {
                opacity:1;
                background-color:white;
            }
        }
        body {
            -webkit-animation:fadein 5s linear 1;
        }
        </style>
    </head>
    <body>
        <div id="animate_1">animation_1</div>
        <div id="animate_2">animation_2</div>
    </body>
    </html>

    上面的例子只是一些很基本的动画效果示例。大家对css3的动画效果感兴趣的可以结合我前一次的分享的transition一起实现更加有趣的动画效果。期待大家动手试试吧!

  • 相关阅读:
    一个Work Stealing Pool线程池的实现
    一步一步解剖Libevent源代码
    一步一步学习堆排序算法
    一个通用的Makefile框架
    为什么我们知道那么多道理(理论),却依然处理不好目前的生活
    SQL
    走进Java Map家族 (1)
    Java数组协变与范型不变性
    尝鲜Java 12新特性:switch表达式
    android高级UI之PathMeasure<一>--Path测量基础(nextContour、getPosTan、getMatrix、getSegment)
  • 原文地址:https://www.cnblogs.com/qiheng/p/3590663.html
Copyright © 2020-2023  润新知