zoukankan      html  css  js  c++  java
  • CSS动画效果的回调

    用纯JS实现动画效果代码量大,计算复杂.因此现在前端页面的动画效果一般都采用CSS来实现.

    CSS动画实现简单高效,但是在处理动画,控制动画过程上却缺少一些有效手段.

    例如我们想在动画效果完成时调用回调函数来处理一些事务,会发现CSS并没有提供直接的方法来让我们使用.

    一.css动画简介

    css动画效果有两种,即过渡和动画.

    1.过渡

    当元素从一种样式转变为另一种样式,我们为这种转变添加动画效果,这种效果就称作过渡.

    CSS的过渡是通过 transtion 属性实现的.

    transtion属性必须包含以下两个值:

    • 要添加过渡效果的样式属性名
    • 过渡效果持续时间

    另外还有两个可选的属性值:

    • 过渡效果的速度时间曲线函数
    • 过渡效果的延迟时间

    下面是一个CSS过渡效果的例子:

       div{
          width: 100px;
          transition: width 2s;
          -webkit-transtion:width 2s;
        }
        div.hover{
          width: 300px;
        }

     当鼠标移动到此div上时,此div宽度会增加200px.

    我们为宽度添加上 2s 过渡效果.最后效果如下:

     

     2.动画

    在实现比较复杂的动画时,单纯使用过渡已经无法达到目的,可以选择使用CSS的animation属性来定义动画效果.

    要想使用animation属性,我们必须先了解一下CSS3加入的@keyframes规则.

    @keyframes规则用于创建动画,可以从动画运动状态的帧来定义动画.

    如下即@kayframes定义动画的例子:

    @keyframes show
    {
        from {color: red;}
        to {color: yellow;}
    }
    
    @-webkit-keyframes show /* Safari 与 Chrome */
    {
        from {color: red;}
        to {color: yellow;}
    }

    通过@keyframes我们可以定义动画从开始到结束的样式变化 .

    我们也可以通过定义动画效果的百分比状态来定义动画样式,如下

    @keyframes show
    {
        0%   {color: red;}
        25%  {color: yellow;}
        50%  {color: blue;}
        100% {color: green;}
    }
    
    @-webkit-keyframes show /* Safari 与 Chrome */
    {
        0%   {color: red;}
        25%  {color: yellow;}
        50%  {color: blue;}
        100% {color: green;}
    }

    在使用@keyframes定义了动画效果之后,我们可以通过 animation 来将动画效果绑定到元素,如下:

    div:hover{
       animation:show 5s;
    }

    具体效果如下:

    动画文字

     鼠标移动其上即可看到动画效果

    以上就是CSS动画的简单介绍,另外CSS3还添加了transform属性,用于2D和3D转换,也被经常用来作为动画使用.

    二.CSS动画的回调函数

    像以上的CSS动画,如果想使用回调函数来控制动画完成后的事务处理,是比较麻烦的.

    一.延时函数

    很多人使用JS的延时函数 setTimtout() 来解决CSS动画的回调问题,类似如下的代码:

    setTimtout(function(){
         dosomething()  //动画的回调函数
         }, delaytime);      //动画的持续时间

    但是这种方法由于并不是真正意义的回调,会造成以下几个问题:

    • 由于动画和延时函数并不一定是同一时间开始,导致函数和动画不同步
    • 会造成JS代码和CSS代码相互关联耦合,修改和维护比较麻烦
    • 存在多个动画需要回调时会造成代码混乱和臃肿
    • 在多个动画效果同时结束时会引起回调函数冲突

    因此,不建议使用延时函数作为动画的回调函数.

    二.JS事件

    其实,JS提供了两个事件,可以完美的解决动画的回调函数问题,那就是 transtionend 和 animationend,当动画完成时,即会触发对应的事件.

    我们可以通过这两个事件轻松优雅的为动画添加回调函数.

    具体用法如下:

    transtionend

    document.getElementById("myDIV").addEventListener("transitionend", myFunction); //myFunction即为动画回调函数

    animationend

    document.getElementById("myDIV").addEventListener("animationend", myFunction); //myFunction即为回调函数

    我们通过以下这个例子来体验这两个事件的具体使用:

    <style>
      div#test
    {
      width:100px;
      height:100px;
      background:red;
      transition:width 2s;
      -webkit-transition:width 2s; /* Safari */
    }
    
    div#test:hover
    {
      width:300px;
    }
    </style>
    </head>
    <body>
    <div id="test">&nbsp;</div> 
    <script>
    document.getElementById("test").addEventListener("transitionend", myFunction);
    function myFunction() {
        this.innerHTML = "回调函数触发div变为粉色";
        this.style.backgroundColor = "pink";
    }
    </script>

    效果如下:

     

    当然也可以使用Jquery库的动画回调函数,很简单,代码类似如下,

       $("#item").animate({height:"200px"}, function() {
            alert("hello");
        });

    以上就是关于CSS动画回调函数的一些知识,希望对你有帮助.

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/afei-qwerty/p/6869023.html
Copyright © 2011-2022 走看看