原生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 相关文章推荐
改善你的jQuery的25个步骤 千倍级效率提升
Feb 11 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
Jun 14 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
ie中js创建checkbox默认选中问题探讨
Oct 21 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
Feb 28 Javascript
js实现密码强度检测【附示例】
Mar 30 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
May 27 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
Scala解析Json字符串的实例详解
Oct 11 Javascript
微信小程序中遇到的iOS兼容性问题小结
Nov 14 Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 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相关资料
2006/10/09 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
python中pycurl库的用法实例
2014/09/30 Python
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
python创建文件备份的脚本
2018/09/11 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
竞选演讲稿范文
2013/12/28 职场文书
物理教师自荐信范文
2013/12/28 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
群众路线剖析材料
2014/02/02 职场文书
授权委托书范文
2014/07/31 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
西游记读书笔记
2015/06/25 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python