【发布时间】:2018-04-06 08:23:58
【问题描述】:
我想检查过渡何时结束,但它会触发两次/多次,我只想在单击元素并调用函数时检查一次,而不是在删除类时再次检查,我尝试使用 @987654321 @, stopPropagation() 甚至 return false 在函数的末尾,但它不起作用,如何实现?
这是一个例子:
$(document).ready(function() {
$(document).on("click", ".main", function() {
$(this).addClass('example');
checkEndTransition()
})
function checkEndTransition() {
$(document).on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", ".main", function() {
$.when($(this)).done(function() {
console.log("Finished")
var val = $(this)
setTimeout(function () {
val.removeClass("example")
}, 1500)
})
})
}
})
.main{
width: 170px;
height: 170px;
background-color: lightgrey;
transition: 1.5s;
}
.example{
width: 250px;
height: 250px;
background-color: #7fff7f;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="main">
<div>
</div>
<div>
【问题讨论】:
-
它调用了 3 次,因为您正在制作 3 个元素的动画 - 宽度、高度和背景颜色。它称为“transitionend、webkitTransitionEnd 等”。当他们完成时为每一个
-
你的
$.when(this).done(...逻辑也是多余的
标签: javascript jquery css events transition