jquery $.event.special 的具体用法 bootstrap-transition.js里面的疑问
在bootstrap v3.3.7源码文件transition.js 问题在文件尾部注释处,谢谢!!
// transition.js 文件
+function ($) {
'use strict';
function transitionEnd() {
var el = document.createElement('bootstrap')
var transEndEventNames = {
WebkitTransition : 'webkitTransitionEnd',
MozTransition : 'transitionend',
OTransition : 'oTransitionEnd otransitionend',
transition : 'transitionend'
}
for (var name in transEndEventNames) {
if (el.style[name] !== undefined) {
return { end: transEndEventNames[name] }
}
}
return false // explicit for ie8 ( ._.)
}
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
$(this).one('bsTransitionEnd', function () { called = true })
var callback = function () {
if (!called) {
$($el).trigger($.support.transition.end)
}
}
setTimeout(callback, duration)
return this
}
$(function () {
$.support.transition = transitionEnd()
if (!$.support.transition) return
// 这一段我的理解是 相当于给各种浏览器的 transitionEnd事件统一创建了一个别名: bsTransitionEnd
// 但是我并不明白它具体表达的是什么意思,例如bindType/delegateType/handle/e.handleObj 这些事什么属性,我并没有找到相关的文档,文章....
// 找到关于transition.js解析的的文章也并没有 具体介绍
// 向大佬请教 或者来个连接什么的 谢谢!!!!
$.event.special.bsTransitionEnd = {
bindType: $.support.transition.end,
delegateType: $.support.transition.end,
handle: function (e) {
if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
}
}
})
}(jQuery)
还有一个疑问,emulateTransitionEnd() 兼容了浏览器有时不触发transitionEnd事件的情况, 既然浏览器有这种问题,为什么不直接都用定时器 触发bstransitionEnd好了???统一都通过定时器触发,好像也没有兼容性问题什么的,也免去各种判断.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论