原生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 相关文章推荐
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 Javascript
javascript loadScript异步加载脚本示例讲解
Nov 14 Javascript
PHP中使用微秒计算脚本执行时间例子
Nov 19 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
利用jquery实现实时更新歌词的方法
Jan 06 Javascript
JavaScript实现商品评价五星好评
Nov 30 Javascript
JavaScript中的几种继承方法示例
Dec 06 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闭包实例解析
2014/09/08 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
JQuery 选择器、过滤器介绍
2011/02/14 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python中shell执行知识点
2020/05/06 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
党员公开承诺书范文
2014/03/25 职场文书
安全生产责任书范本
2014/04/15 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
看雷锋电影观后感
2015/06/10 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python