zoukankan      html  css  js  c++  java
  • animation

    一、基本语法

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

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

    <img src="dog.jpg">

    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);
        }
    }
  • 相关阅读:
    17. Letter Combinations of a Phone Number
    16. 3Sum Closest
    15. 3Sum
    14. Longest Common Prefix
    13. Roman to Integer
    12. Integer to Roman
    11. Container With Most Water
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/xlj-code/p/6108540.html
Copyright © 2011-2022 走看看