CSS转换完成后是否可以获得通知(如回调)?CSS转换回调
CSS转换回调
回答
我知道Safari实现了一个webkitTransitionEnd回调函数,您可以直接附加到具有转换的元素。
他们的例子(重新格式化,以多行):
box.addEventListener(
'webkitTransitionEnd',
function(event) {
alert("Finished transition!");
}, false);
是的,如果这样的事情是由浏览器支持的,则事件被转换完成时触发。实际的事件然而,浏览器之间的区别:
- Webkit的浏览器(Chrome浏览器,Safari浏览器)使用
webkitTransitionEnd
- Firefox使用
transitionend
- IE9 +采用
msTransitionEnd
- Opera使用
oTransitionEnd
但是你应该知道,webkitTransitionEnd
并不总是会发射!这引起了我很多次,并且如果动画对元素没有影响似乎就会发生。为了解决这个问题,在未按预期触发的情况下,使用超时来触发事件处理程序是有意义的。关于这个问题的博客文章,请访问:http://www.cuppadev.co.uk/the-trouble-with-css-transitions/< - 500内部服务器错误
考虑到这一点,我倾向于使用的代码块这个事件,看起来有点像这样:
var transitionEndEventName = "XXX"; //figure out, e.g. "webkitTransitionEnd"..
var elemToAnimate = ... //the thing you want to animate..
var done = false;
var transitionEnded = function(){
done = true;
//do your transition finished stuff..
elemToAnimate.removeEventListener(transitionEndEventName,
transitionEnded, false);
};
elemToAnimate.addEventListener(transitionEndEventName,
transitionEnded, false);
//animation triggering code here..
//ensure tidy up if event doesn't fire..
setTimeout(function(){
if(!done){
console.log("timeout needed to call transition ended..");
transitionEnded();
}
}, XXX); //note: XXX should be the time required for the
//animation to complete plus a grace period (e.g. 10ms)
注:获得的过渡事件结束的名字,你可以使用张贴在答案的方法: How do I normalize CSS3 Transition functions across browsers?。
注意:这个问题也涉及到: - CSS3 transition events
这是一个更完整的答案比接受的要好。为什么这不是更高效的。 – Wes 2013-06-23 09:29:42
请记住在transitionEnded中调用transitionEndedHandler(或者在addEventListener和removeEventListener中用transitionEndedHandler改变transitionEnded并在transitionEndedHandler中调用transitionEnded) – Miquel 2015-01-31 13:52:21
Thanks @Miquel;当我的意思是'transitionEndedHandler'时,我认为我刚刚使用了'transitionEnded'。 – 2015-01-31 18:31:05
的jQuery.transit plugin,对CSS3转换和过渡的一个插件,可以从脚本中调用你的CSS动画,并给您一个回调。
我正在使用下面的代码,比试图检测浏览器使用哪个特定的结束事件要简单得多。
$(".myClass").one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd',
function() {
//do something
});
另外,如果你使用引导程序,那么你可以简单地做
$(".myClass").one($.support.transition.end,
function() {
//do something
});
这是监守它们包括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 ( ._.)
}
// 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
}
$(function() {
$.support.transition = transitionEnd()
})
}(jQuery);
这比较慢,因为每次事件发生时都必须搜索整个列表,看看它是否是正确的。 – phreakhead 2014-02-13 07:07:22
@phreakhead任何这些方法的表现都非常相似 – Tom 2014-05-13 15:31:40
- 1. C#回调转换
- 2. CSS变换旋转回
- 3. 调试React CSS转换
- 4. 将回调转换为流
- 5. Javascript回调重置转换
- 6. Android片段转换回调
- 7. css切换与css转换
- 8. 与CSS的CSS转换没有转换
- 9. CSS转换不调整高度
- 10. CSS转换权
- 11. 绷CSS转换
- 12. css转换_without_hover?
- 13. webkit css转换
- 14. CSS转换表
- 15. CSS 3D转换
- 16. CSS转换旋转img
- 17. CSS图像旋转转换
- 18. 激活CSS翻转转换
- 19. CSS转换旋转mozilla
- 20. 在回调中将shared_ptr转换为void *
- 21. 转换一个C++回调到Java
- 22. 将回调转换为RxJava Observables
- 23. 当CSS3转换完成时回调
- 24. 将嵌套的回调转换为Promise
- 25. 在Nodejs中将回调转换为RX.Observable
- 26. 文档转换后的回调
- 27. 如何将回调转换为承诺
- 28. Facebook的转换事件回调
- 29. 将JavaScript回调函数转换为jQuery?
- 30. CSS转换交换功能
的http://计算器。 com/questions/5023514/how-do-i-normalize-css3-transition-functions-across-browsers – zloctb 2015-03-06 11:52:32