所有
我的情况大致如下:
我的HTML页面包含div(我称之为“parentDiv”),我正在执行转换。当转换结束时,它应该调用“onTransitionEndParent”
parentDiv包含一个div(我称之为“childDiv”),我正在执行不同的转换。当转换结束时,它应该调用“onTransitionEndChild”。
所以,我的代码大致如下:
parentDiv.addEventListener("webkitTransitionEnd", onTransitionEndParent, false);
childDiv.addEventListener("webkitTransitionEnd", onTransitionEndChild, false);
我找到的问题......
当parentDiv的转换结束(正确)时,将调用onTransitionEndParent。但是,当childDiv的转换结束时,它被 ALSO 调用(不是我预期的......)
换句话说......
这是正确的行为,还是我做错了什么?
有没有办法确保onDnsitionEndParent仅在parentDiv的转换结束时被调用,而不是当它的任何子div的转换结束时才被调用?
非常感谢提前。
答案 0 :(得分:33)
transitionEnd
是所谓的冒泡事件,正在从子项向其父项发送(冒泡)。
您的选择:
event.target
属性 - 它
应包含已结束过渡的元素。event.stopPropagation()
以防止其冒泡。答案 1 :(得分:3)
我在上次Chrome更新后遇到了同样的问题。儿童动画触发了父母的动画。这仅发生在桌面版Chrome浏览器中,而不是FF或Chrome移动版。
对于任何有兴趣的人,我使用以下方法解决了这个问题:
$(element).on("animationend webkitAnimationEnd", function(){
//do something
})
.children().on("animationend webkitAnimationEnd", function(){
return false; //you can just use event.stopPropagation()
});
答案 2 :(得分:1)
要添加到@ c-smiles应答,检查event.propertyName会在元素上有多个转换时发挥作用。所以,例如 -
button.addEventListener('transitionend', function(event) {
if (event.target.classList.contains('button') && event.propertyName === 'opacity') {
button.classList.add('hide');
}
}, false);