当前位置: 首页 > 编程笔记 >

JavaScript探测CSS动画是否已经完成的方法

唐睿
2023-03-14
本文向大家介绍JavaScript探测CSS动画是否已经完成的方法,包括了JavaScript探测CSS动画是否已经完成的方法的使用技巧和注意事项,需要的朋友参考一下

不啰嗦上代码:

WN:(function(){
      var el = $('<fakeelement>'),
        transition="transition",
        transitionEnd,
        animEvent={'start':null,'iteration':null,'end':null},
        vendorPrefix;
        
      transition = transition.charAt(0).toUpperCase() + transition.substr(1);
      
      vendorPrefix=(function(){//现在的opera也是webkit
        var i=0, vendor=["Moz", "Webkit", "Khtml", "O", "ms"];
        while (i < vendor.length) {
          if (typeof el.css(vendor[i] + transition) === "string"){
            return vendor[i];
          }
          i++;
        }
        return false;
      })();
      
      transitionEnd=(function(){
        var transEndEventNames = {
          WebkitTransition : 'webkitTransitionEnd',
          MozTransition  : 'transitionend',
          OTransition   : 'oTransitionEnd otransitionend',
          transition    : 'transitionend'
        }
        for(var name in transEndEventNames){
          if(typeof el.css(name) === "string"){
            return transEndEventNames[name];
          }
        }
      })();
      
      animEvent.end=(function(){
        var animEndEventNames = {
          WebkitAnimation : 'webkitAnimationEnd',
          animation   : 'animationend'
        }
        for(var name in animEndEventNames){
          if(typeof el.css(name) === "string"){
            return animEndEventNames[name];
          }
        }
      })();
      
      animEvent.iteration=(function(){
        var animIterationEventNames = {
          WebkitAnimation : 'webkitAnimationIteration',
          animation   : 'animationiteration'
        }
        for(var name in animIterationEventNames){
          if(typeof el.css(name) === "string"){
            return animIterationEventNames[name];
          }
        }
      })();
      
      animEvent.start=(function(){
        var animStartEventNames = {
          WebkitAnimation : 'webkitAnimationStart',
          animation   : 'animationstart'
        }
        for(var name in animStartEventNames){
          if(typeof el.css(name) === "string"){
            return animStartEventNames[name];
          }
        }
      })();
      
      return {
        called:false,
        addTranEvent:function(elem,fn,duration){
          var self = this;
          var fncallback = function(){
            if(!self.called){
              fn();
              self.called = true;
            }
          };
          function hand(){  
            elem.on(transitionEnd,function(){
              //elem.unbind(transitionEnd,arguments.callee);
              fncallback();
            });
          }
          setTimeout(hand,duration);
        },
        addAnimEvent:function(elem,name,fn){
          elem.on(animEvent[name],fn);
        },      
        removeAnimEvent:function(elem,name,fn){
          elem.unbind(animEvent[name],fn);
        },
        setStyleAttribute:function(elem,val){
          if(Object.prototype.toString.call(val) === "[object Object]"){
            for(var name in val){
              if(/^transition|animation|transform/.test(name)){
                var styleName=name.charAt(0).toUpperCase() + name.substr(1);
                elem.css(vendorPrefix+styleName,val[name]);
              }else{
                elem.css(name,val[name]);
              }
            }
          }
        }
      };
    })(),

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍JavaScript检测浏览器cookie是否已经启动的方法,包括了JavaScript检测浏览器cookie是否已经启动的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript检测浏览器cookie是否已经启动的方法。分享给大家供大家参考。具体分析如下: JavaScript检测浏览器cookie是否已经启动,代码稍显复杂,通过写入一个测试cookie判断

  • 问题内容: 我正在使用AngularJS,并希望在动画制作完成后得到通知。我知道可以使用像这样的javascript定义的动画来完成此操作,但是我很好奇我是否可以不用javascript来做到这一点。 问题: 是否可以使用角度 ng-enter 和 ng-leave css- transitions并指定完成的回调?我猜该事件已被触发,因此应该有一种方法可以执行此操作。 我有这个: HTML: C

  • 问题内容: 在css3动画的情况下,有什么方法可以实现回调函数?如果使用Javascript动画,则可能会在CSS3中找到实现它的方法,但找不到任何方法。 我可以看到的一种方法是在动画持续时间之后执行回调,但是并不能确保始终在动画结束后立即调用它。这将取决于浏览器UI队列。我想要一个更强大的方法。有什么线索吗? 问题答案: 就在这里。回调是一个事件,因此您必须添加事件侦听器才能捕获它。这是jQue

  • 本文向大家介绍JavaScript判断图片是否已经加载完毕的方法汇总,包括了JavaScript判断图片是否已经加载完毕的方法汇总的使用技巧和注意事项,需要的朋友参考一下 在网上有很多关于判断图片是否已经加载完毕的文章,但是有的浏览器并不适合,下面小编给大家分享一些有关JavaScript判断图片是否已经加载完毕方法汇总,具体内容如下所示: 一.onload事件 通过监听图片的onload事件,可

  • 所以我想知道,我想看看一个表是否已经被懒/急加载了,而没有在我检查时实际加载它。例如: 所以当我设置($this)时-

  • 与不同,没有简单的方法来设置空视图,因此必须手动管理它,在适配器的项计数为0的情况下使空视图可见。 为了实现这一点,首先,我尝试在修改下垫结构(在我的示例中为)后立即调用空视图逻辑,例如: 它做了这件事,但有一个缺点:当最后一个元素正在被移除时,空视图出现在移除动画完成之前,在移除之后立即出现。所以我决定等到动画结束再更新UI。 令我惊讶的是,我找不到一个好的方法来收听RecycerView中的动