原生JS检测CSS3动画是否结束的方法详解


Posted in Javascript onJanuary 27, 2019

本文实例讲述了原生JS检测CSS3动画是否结束的方法。分享给大家供大家参考,具体如下:

不知道大家在做网页的时候有没有碰到这种情况:当你使用CSS3的动画属性时,想要在动画结束后添加一系列操作,但往往这些操作可能会发生在与动画同时出现或者是在动画还没结束时就发生了。

针对这种情况我们会使用js来监听动画是否结束即它的style的transition属性是否为transitionend;下面我们通过一个简单的例子来理解一下我这句话的含义:

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>通过原生js检测CSS3的动画结束</title>
  <style>
  *{padding: 0;margin: 0;}
  .test{
    width: 200px;
    height: 200px;
    border: 1px soli black;
    background: red;
    transition-property:width;
    transition-duration: 3s;
  }
  /* 动画 */
  .test.move{
    width:600px;
  }
  button{
    width: 80px;
    height: 25px;
    font-size: 16px;
    text-align: center;
    line-height: 25px;
  }
  </style>
</head>
<body>
  <div class="test" id="main">
  </div>
  <button id="play">开始运动</button>
</body>
<script>
  // 示例动画主要是改变div的宽度
  // 主要是通过检测transition的值是否为transitionend
  function init() {
    var main = document.getElementById('main');
    var play = document.getElementById('play');
    var test = document.getElementsByClassName('test')[0];
    // 兼容性写法
    transitions = {
      // 兼容IE
      'transition': 'transitionend',
      // 兼容Opera
      'OTransition': 'oTransitionEnd',
      // 兼容Firefox
      'MozTransition': 'transitionend',
      // 兼容Google
      'WebkitTransition': 'webkitTransitionEnd'
    };
    function getTransitions() {
      var t;
      for (t in transitions) {
        // t即transition,OTransition,MozTransition,WebkitTransition
        if (main.style[t] !== undefined) {
          return transitions[t];
        }
      }
    }
    // 按钮添加click事件
    play.onclick = function () {
      main.classList.add('move');
    };
    // 接收返回的当前浏览器的transition的值
    var setTransitions = getTransitions();
    // 添加监听事件
    setTransitions && main.addEventListener(setTransitions,function (params) {
      alert('动画结束');
      // 删除类名move
      main.classList.remove('move');
    },false)
  }
  init();
</script>
</html>

效果如下:

原生JS检测CSS3动画是否结束的方法详解

可以看到当动画结束时才弹出弹框可以验证方法的可行性。

最后提一下,这个方法仍存在一些问题,比如你改变两个属性:宽度和高度,可能就会触发这个方法两次或者多次,所以使用的时候要注意一下。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
两个DIV等高的JS的实现代码
Dec 23 Javascript
select标签模拟/美化方法采用JS外挂式插件
Apr 01 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
动态Axios的配置步骤详解
Jan 12 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
jquery拖拽自动排序插件使用方法详解
Jul 20 jQuery
Vue动态创建注册component的实例代码
Jun 14 Javascript
es6函数之rest参数用法实例分析
Apr 18 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 Javascript
原生JS实现的跳一跳小游戏完整实例
Jan 27 #Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 #Javascript
vue-cli构建vue项目的步骤详解
Jan 27 #Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 #Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 #Javascript
实例讲解JS中pop使用方法
Jan 27 #Javascript
Vue.js实现的购物车功能详解
Jan 27 #Javascript
You might like
用php+mysql一个名片库程序
2006/10/09 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
PHP获取数组中指定的一列实例
2017/12/27 PHP
可输入的下拉框
2006/06/19 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
vue如何引入sass全局变量
2018/06/28 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
pycharm创建一个python包方法图解
2019/04/10 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
python datetime中strptime用法详解
2019/08/29 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
食品安全演讲稿
2014/09/01 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2014年评职称工作总结
2014/11/20 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
初中信息技术教学反思
2016/02/16 职场文书
八年级作文之友谊
2019/12/02 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript