首页 > web前端 > css教程 > 如何跨不同浏览器可靠地检测和处理 CSS3 转换结束事件?

如何跨不同浏览器可靠地检测和处理 CSS3 转换结束事件?

Linda Hamilton
发布: 2024-12-04 21:41:13
原创
598 人浏览过

How Can I Reliably Detect and Handle CSS3 Transition End Events Across Different Browsers?

CSS3 转换结束事件的跨浏览器标准化

跨浏览器处理不同的 CSS3 转换结束事件名称可能是一个挑战。以下是解决此问题的一些方法:

浏览器嗅探

一种方法是浏览器嗅探,如下所示:

var transitionend = (isSafari) ? "webkitTransitionEnd" : (isFirefox) ? "transitionEnd" : (isOpera) ? "oTransitionEnd" : "transitionend";

element.addEventListener(transitionend, function() {
  // Do something
}, false);
登录后复制

此方法检查特定的浏览器用户代理并分配适当的事件名称。但是,它依赖于特定的预定义规则,可能无法考虑所有浏览器版本或潜在变化。

多个事件监听器

或者,您可以为每个支持的浏览器事件名称:

element.addEventListener("webkitTransitionEnd", fn);
element.addEventListener("oTransitionEnd", fn);
element.addEventListener("transitionEnd", fn);

function fn() {
  // Do something
}
登录后复制

此方法处理所有支持的事件,但可能会导致不必要的事件处理

Modernizr 的改进技术

更强大且跨浏览器友好的方法是使用 Modernizr 库动态确定转换结束事件名称:

function transitionEndEventName() {
  var el = document.createElement('div'),
      transitions = {
        'transition':'transitionend',
        'OTransition':'otransitionend',
        'MozTransition':'transitionend',
        'WebkitTransition':'webkitTransitionEnd'
      };

  for (var i in transitions) {
    if (transitions.hasOwnProperty(i) && el.style[i] !== undefined) {
      return transitions[i];
    }
  }

  throw 'TransitionEnd event is not supported in this browser'; 
}

var transitionEnd = transitionEndEventName();
element.addEventListener(transitionEnd, theFunctionToInvoke, false);
登录后复制

此技术避免了浏览器嗅探,并根据元素支持的 CSS 动态检测支持的事件名称属性。

以上是如何跨不同浏览器可靠地检测和处理 CSS3 转换结束事件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板