原生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 相关文章推荐
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
详解Javascript 装载和执行
Nov 17 Javascript
js文字横向滚动特效
Nov 11 Javascript
js简单获取表单中单选按钮值的方法
Aug 23 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
在小程序中使用Echart图表的示例代码
Aug 02 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
Aug 10 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 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数据访问
2016/05/09 PHP
php版微信小店调用api示例代码
2016/11/12 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
jQuery实现点击查看大图并以弹框的形式居中
2016/08/08 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
python list语法学习(带例子)
2013/11/01 Python
Python之eval()函数危险性浅析
2014/07/03 Python
go语言计算两个时间的时间差方法
2015/03/13 Python
python实现根据月份和日期得到星座的方法
2015/03/27 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
scrapy爬虫实例分享
2017/12/28 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
编辑找工作求职信范文
2013/12/16 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
小学校长开学致辞
2015/07/29 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js
Python循环之while无限迭代
2022/04/30 Python