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动画回调函数的一些知识,希望对你有帮助.

  • 相关阅读:
    低代码:时代的选择
    AI+云原生,把卫星遥感虐的死去活来
    网络货运平台要智能,安全的数据底座少不了
    基于昇腾CANN的卡通图像生成可在线体验啦!十分钟带你了解CANN应用开发全流程
    什么是强化学习?
    高可用架构演进之单元化
    AOC萌新探索:搭建和体验在线AOC环境
    如何将知识引入机器学习模型提升泛化能力?
    零代码以“王者荣耀”为例解析设计七原则
    从零开始搭建前端脚手架
  • 原文地址:https://www.cnblogs.com/afei-qwerty/p/6869023.html
Copyright © 2011-2022 走看看