And*_*rle 189 javascript events transition css3 css-transitions
是否有任何事件由一个元素触发来检查css3转换是否已经开始或结束?
Dav*_*cic 210
完成CSS Transition会生成相应的DOM事件.每个经历过渡的属性都会触发一个事件.这允许内容开发者执行与转换完成同步的动作.
您可以为在转换结束时发送的DOM事件设置处理程序.该事件是WebKitTransitionEvent的一个实例,其类型是JavaScript中的webKitTransitionEnd.
box.addEventListener( 'webkitTransitionEnd',
function( event ) { alert( "Finished transition!" ); }, false );
Run Code Online (Sandbox Code Playgroud)
转换完成时会触发一个事件.在Firefox中,事件是
webkitTransitionEnd
在Opera中transitionend
,而在WebKit中则是oTransitionEnd
.
有一种类型的过渡事件可用.该
webkitTransitionEnd
事件发生在转换完成时.
该
oTransitionEnd
事件发生在转换完成时.如果在完成之前移除了转换,则不会触发该事件.
那么:我如何规范浏览器中的CSS3 Transition功能?
Tom*_*Tom 70
我正在使用Pete给出的方法,但我现在开始使用以下方法
$(".myClass").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd',
function() {
//do something
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用bootstrap,那么您可以这样做
$(".myClass").one($.support.transition.end,
function() {
//do something
});
Run Code Online (Sandbox Code Playgroud)
这是因为它们在bootstrap.js中包含以下内容
+function ($) {
'use strict';
// CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
// ============================================================
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 ( ._.)
}
$(function () {
$.support.transition = transitionEnd()
})
}(jQuery);
Run Code Online (Sandbox Code Playgroud)
请注意,它们还包括一个emulateTransitionEnd函数,可能需要该函数来确保始终发生回调.
// http://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false, $el = this
$(this).one($.support.transition.end, function () { called = true })
var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
setTimeout(callback, duration)
return this
}
Run Code Online (Sandbox Code Playgroud)
请注意,有时此事件不会触发,通常是在属性未更改或未触发绘制的情况下.为了确保我们始终获得回调,让我们设置一个超时,即手动触发事件.
http://blog.alexmaccaw.com/css-transitions
小智 16
在Opera 12中使用普通JavaScript进行绑定时,'oTransitionEnd'将起作用:
document.addEventListener("oTransitionEnd", function(){
alert("Transition Ended");
});
Run Code Online (Sandbox Code Playgroud)
但是如果你通过jQuery绑定,你需要使用'otransitionend'
$(document).bind("otransitionend", function(){
alert("Transition Ended");
});
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Modernizr或bootstrap-transition.js,您只需进行更改:
var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd',
'MozTransition' : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend',
'msTransition' : 'MSTransitionEnd',
'transition' : 'transitionend'
},
transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
Run Code Online (Sandbox Code Playgroud)
你也可以在这里找到一些信息http://www.ianlunn.co.uk/blog/articles/opera-12-otransitionend-bugs-and-workarounds/
只是为了好玩,不要这样做!
$.fn.transitiondone = function () {
return this.each(function () {
var $this = $(this);
setTimeout(function () {
$this.trigger('transitiondone');
}, (parseFloat($this.css('transitionDelay')) + parseFloat($this.css('transitionDuration'))) * 1000);
});
};
$('div').on('mousedown', function (e) {
$(this).addClass('bounce').transitiondone();
});
$('div').on('transitiondone', function () {
$(this).removeClass('bounce');
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
136481 次 |
最近记录: |