3 回答

TA贡献1995条经验 获得超2个赞
transitionend
事件会在 CSS transition 结束后触发。
在你的例子中,transitionend
确实会多次触发。
比如
transition: width 2s, height 2s, background-color 2s, transform 2s;
那么 transitionend
事件会被触发 4 次。
如果在中途取消了过渡动画,那么 transitionend
就不会触发。或者 transition 完成前设置 display
为 "none"
,事件同样不会被触发。

TA贡献1851条经验 获得超5个赞
transition后加过渡时间,transitionend 事件会在时间间隔后才会被触发。所以我的理解是css先加载,但是这个过渡的过程是异步的,此时绑定transitionend 事件的脚本已经执行到了。不知道我这样理解对不对,如果不对还望有人指正。
我做了一个实验:
html:
<div class="transition_div" id="transition_div" onmouseover="fun_hover()">
</div>
js:
function fun_transitionend(){
console.log("transition end");
}
function fun_hover(){
console.log("start event binding");
document.getElementById("transition_div").addEventListener('transitionend',fun_transitionend);
}
css:
.transition_div{
height:100px;
width:100px;
background:red;
-webkit-transition:width 5s;
-moz-transition:width 5s;
-ms-transition:width 5s;
-o-transition:width 5s;
transition:width 5s;
}
.transition_div:hover
{
width:300px;
}
图形开始过渡变换宽度的时候,事件绑定代码开始执行,变换完成后触发transitionend事件处理函数。
添加回答
举报