transitionEnd和animationEnd的一个临时解决方案
transtionEnd需要添加前缀,并且存在多次触发问题,animationEnd也需要添加前缀,下面是一个临时性解决方案,解决了部分问题,完美方案探索中
(function(){
    var body=document.body || document.documentElement,
        style=body.style;
    var vendorPrefix=(function(){
        var i=0, vendor=["Moz", "Webkit", "Khtml", "O", "ms"];
        transition=transition.charAt(0).toUpperCase() + transition.substr(1);
        while (i < vendor.length) {
            if (typeof style[vendor[i] + transition] === "string") {
                return vendor[i];
            }
            i++;
        }
        return false;
    })();
    var    transitionEnd=(function(){
        var transEndEventNames = {
            WebkitTransition : 'webkitTransitionEnd',
            MozTransition    : 'transitionend',
            OTransition      : 'oTransitionEnd otransitionend',
            transition       : 'transitionend'
        }
        for(var name in transEndEventNames){
            if(typeof style[name] === "string"){
                return transEndEventNames[name]
            }
        }
    })();
    var animationEnd=(function(){
        if(vendorPrefix=="Webkit"){
            return "webkitAnimationEnd";
        }else{
            return "animationend";
        }
    }());
    //解决多次触发问题,transitionEnd在多个属性变化时候会触发多次,子元素也会冒泡,造成父元素事件触发
    //解决不触发问题,duration后检查是否触发,未触发则强制触发
    function addTransitionEndOnce(ele,fn,duration){
        var called = false;
        var callback = function(){
            if (!called){
                fn();
                called = true;
            }
        };
        var callbackEnd = function(){
            callback();
            setTimeout(callback, duration);
            ele.removeEventListener(transitionEnd, callbackEnd);
        }
        ele.addEventListener(transitionEnd, callbackEnd);
    }
    window.vendorPrefix = vendorPrefix;
    window.transitionEnd = transitionEnd;
    //animationEnd只加前缀,自行注册事件即可,不存在多次问题
    window.animationEnd = animationEnd;
    window.addTransitionEnd = addTransitionEnd;
});
transitionEnd和animationEnd的一个临时解决方案的更多相关文章
- DMS是临时解决方案?
		DMS是临时解决方案? Who Says DMS Is an Interim Solution? 现在是认真对待DMS驱动程序监控系统的时候了. 特斯拉(Tesla)在台湾高速公路上撞上翻倒卡车的镜头 ... 
- 关于LogStash运行在AIX 64位机器上的问题与临时解决方案
		需求;logstash运行在SUSE,LINUX,PPC LINUX,AIX机器上,并监控文件发送日志到KAFKA中去, 问题:在AIX机器上,file插件总是报异常,无法完成数据的读取 NotImp ... 
- Git跨平台中文乱码临时解决方案
		Git 是一个非常优秀的分布式版本控制系统,最初为Linux Kernel版本管理进行量身定做.优点是,和其他版本控制系统相比,稳定,速度快,跨平台,易学易用,无需要花费成本.更多优点请点击阅读:ht ... 
- 关于iOS上使用WWW引起的内存泄漏的临时解决方案
		原地址:http://www.unity蛮牛.com/thread-16493-1-1.html 目前,在的4.3.3.和4.3.4版本中存在一个iOS平台上的内存泄漏问题,即当使用WWW来下载和加载 ... 
- 启动tomcat报错One or more listeners failed to start,却找不到任何错误日志的临时解决方案
		在整合spring和quartz时,启动tomcat,服务台报以上错误,却找不到任何错误日志…… 参考了https://www.cnblogs.com/sxdcgaq8080/p/8005886.ht ... 
- ooofc.com域名备案问题导致无法正常访问临时解决方案
		各位尊敬的easyradius用户: 由于临时收到ooofc.coom域名备案被删除的消息,之后ooofc.com就无法访问.导致用户无法访问控制台oa.ooofc.com,及用户中心user.ooo ... 
- 360随身wifi无法使用临时解决方案大全
		360随身wifi在绝大多数情况下都是可以正常使用的,但在极少数系统或网络环境下可能会出现异常,如系统服务缺失.公司网络限制.少数校园网客户端限制等等: 360攻城师正在积极努力解决 ... 
- vue-router同路由$router.push不跳转一个简单解决方案
		vue-router同路由$router.push不跳转一个简单解决方案 vue-router跳转一般是这么写: toCurrentPage: function(thisId){ this.$rout ... 
- ClsoSee(v2) Alpha测试中!这是一个临时的帮助页面...
		Clso See 测试中,最新的更新信息会显示在这里,欢迎您随时关注新版本动态. 您可以单击这里让程序打开本地帮助文件(新说明.txt) 等程序完成后,会制作专门的帮助页面. 因为采用了键盘Hook技 ... 
随机推荐
- hive 学习系列五(hive 和elasticsearch 的交互,很详细哦,我又来吹liubi了)
			hive 操作elasticsearch 一,从hive 表格向elasticsearch 导入数据 1,首先,创建elasticsearch 索引,索引如下 curl -XPUT '10.81.17 ... 
- POJ1659  可图性判定
			Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10660 Accepted: 4 ... 
- 分布式系统的CAP(Redis)
			CAP理论就是说在分布式存储系统中,最多只能实现上面的两点.而由于当前的网络硬件肯定会出现延迟丢包等问题,所以 分区容忍性是我们必须需要实现的. 所以我们只能在一致性和可用性之间进行权衡,没有NoSQ ... 
- 一步一步构建手机WebApp开发——页面布局篇
			继上一篇:一步一步构建手机WebApp开发——环境搭建篇过后,我相信很多朋友都想看看实战案例,这一次的教程是页面布局篇,先上图: 如上图所示,此篇教程便是教初学者如何快速布局这样的页面.废话少说,直接 ... 
- ExtJs4.1目录结构介绍和使用说明[转]
			一.在做ExtJs开发之前首先要到网站上下载ExtJs的开发包,我用的最新版本是4.1.1.此版本相对于之前的版本目录结构发生了一些变化,没有了adapter目录, 目录结构如下 文件/文件夹名的作用 ... 
- 使用JDK自带的keytool工具生成证书
			一.keytool 简介 keytool 是java用于管理密钥和证书的工具,它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及 ... 
- Vue学习(一):Vue实例
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- xamdin: 添加小组件报错: render() got an unexpected keyword argument 'renderer'
			查找到 xadmin里面的 dashboard.py文件内render方法,增加一个rdnderer默认参数是None一般路径在 本机虚拟环境\Lib\site-packages\xadmin\vie ... 
- Floatingip
			浮动IP相关功能点: 模块 功能 描述 备注 FloatingIP 创建浮动IP 指定带宽大小创建单个/多个浮动IP 指定子网.指定IP创建浮动IP 绑定浮动IP,修改带宽 绑定浮动IP到指定 ... 
- Python第二天 (数据类型,变量 )
			1. 把任意数据类型赋值给变量 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如: 例子:a = 123 # a是整数 prin ... 
