如何使用jQuery来等待CSS3过渡的结束?
2022-08-30 01:03:31
我想淡出一个元素(将其不透明度转换为0),然后在完成后从DOM中删除该元素。
在jQuery中,这是直截了当的,因为您可以指定在动画完成后发生的“删除”。但是,如果我希望使用CSS3过渡进行动画处理,那么无论如何都要知道过渡/动画何时完成吗?
我想淡出一个元素(将其不透明度转换为0),然后在完成后从DOM中删除该元素。
在jQuery中,这是直截了当的,因为您可以指定在动画完成后发生的“删除”。但是,如果我希望使用CSS3过渡进行动画处理,那么无论如何都要知道过渡/动画何时完成吗?
对于过渡,您可以使用以下命令通过jQuery检测过渡的结束:
$("#someSelector").bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){ ... });
Mozilla 有一个很好的参考:
对于动画,它非常相似:
$("#someSelector").bind("animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd", function(){ ... });
请注意,您可以将所有浏览器前缀事件字符串同时传递到 bind() 方法中,以支持在所有支持它的浏览器上触发事件。
更新:
根据 Duck 留下的评论:使用 jQuery 的方法确保处理程序只触发一次。例如:.one()
$("#someSelector").one("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){ ... });
$("#someSelector").one("animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd", function(){ ... });
更新 2:
jQuery 方法已被弃用,并且从 开始首选方法。bind()
bind()
on()
jQuery 1.7
您还可以在回调函数上使用方法,以确保它只触发一次。下面是一个等效于使用方法的示例:off()
one()
$("#someSelector")
.on("animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd",
function(e){
// do something here
$(this).off(e);
});
引用:
有一个事件可以观察到,请参阅此处的文档,对于css动画,您可以使用该事件animationend
transition
transitionend
不需要额外的库,这些都与vanilla JS一起工作
document.getElementById("myDIV").addEventListener("transitionend", myEndFunction);
function myEndFunction() {
this.innerHTML = "transition event ended";
}
#myDIV {transition: top 2s; position: relative; top: 0;}
div {background: #ede;cursor: pointer;padding: 20px;}
<div id="myDIV" onclick="this.style.top = '55px';">Click me to start animation.</div>