原生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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
javascript倒计时效果实现
Nov 12 Javascript
详解Javacript和AngularJS中的Promises
Feb 09 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
Jul 14 Javascript
Bootstrap字体图标无法正常显示的解决方法
Oct 08 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
Jan 13 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
Feb 08 Javascript
深入理解vue中slot与slot-scope的具体使用
Jan 26 Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 jQuery
原生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人民币金额转大写实例代码
2015/10/02 PHP
jQuery Ajax 实例全解析
2011/04/20 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
法律专业实习鉴定
2013/12/22 职场文书
八年级语文教学反思
2014/02/11 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
单位考核鉴定意见
2015/06/05 职场文书
财务年终工作总结大全
2019/06/20 职场文书