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技 ...
 
随机推荐
- visual studio 2015密钥
			
Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...
 - thinkphp5阿里大于短信接口
			
function autumn_sendsms($tel,$stype){ $pd_go=true; if($tel==''){ $msg='手机号不能为空'; $pd_go=false; } if( ...
 - 一次 group by + order by 性能优化分析
			
一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...
 - 我的机器学习之路--anaconda环境搭载
			
网上许多教程比较晦涩难懂,本教程按照笔者(新手)自己的视角记录,希望给大家一些帮助 1.安装anaconda 目前比较推荐的机器学习环境为anaconda. Anaconda指的是一个开源的Pytho ...
 - POJ1659  可图性判定
			
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10660 Accepted: 4 ...
 - C++拷贝构造函数 的理解
			
#include <iostream> using namespace std; //拷贝构造函数的理解 class Point { public: Point(); Point(int ...
 - 常用数字信号的产生(C实现)-ARMA模型数据生成
			
ARMA模型属于信号现代谱估计的范畴,AR模型常用于信号的线性预测.AR模型最后归结为线性方程,MA最后为非线性方程,因此,AR模型使用较多. AR模型最后归结为解Yule-Walker方程,对应矩阵 ...
 - 我的阿里之路+Java面经考点
			
我的阿里之路+Java面经考点 时间:2018-03-19 23:03 来源:未知 作者:admin 点击:87次 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三 ...
 - cachel-control
			
nodejs: res.set('Cache-Control', 'public, max-age=31557600'); express全局设置: app.use(express.sta ...
 - Qt Qwdget 汽车仪表知识点拆解1 速度表示
			
先贴上效果图,注意,没有写逻辑,所以这些都是乱动的 这里线主要说一下中间显示速度的显示制作的方式,在这里,自己专门写了一个数字的仪表 考虑的一般的汽车是没有办法把瞬时速度提升到四位数的,所以我这里就放 ...