我有以下代码,我的问题是transitionend
事件被触发了两次。我不知道是什么原因造成的。我怀疑是由供应商前缀引起的,但并非如此。即使我只留下transitionend
和transition
,它仍然会触发两次。
CSS
transition: 1s ease-out;
JS
document.addEventListener('click', function (e) {
var submarine = document.querySelector('.submarine');
var submarineX = e.clientX - submarine.offsetWidth / 2;
var submarineY = e.clientY - submarine.offsetHeight / 2;
submarine.style.left = submarineX + "px";
submarine.style.top = submarineY + "px";
});
document.addEventListener('transitionend', function (event) {
console.log(event.type + " " + new Date().getTime());
});
Fiddle
document.addEventListener('transitionend', function (event) {
console.log(event.type + " " + new Date().getTime());
});
document.addEventListener('click', function (e) {
var submarine = document.querySelector('.submarine');
var submarineX = e.clientX - submarine.offsetWidth / 2;
var submarineY = e.clientY - submarine.offsetHeight / 2;
submarine.style.left = submarineX + "px";
submarine.style.top = submarineY + "px";
});
.submarine {
position: absolute;
top: 0;
left: 0;
width: 20px;
height: 20px;
background-color: red;
border-radius: 50%;
transition: 1s ease-out;
}
<div class="submarine"></div>
最佳答案
每种转换的属性都会触发transitionend
,在您的情况下为top
和left
。
您可以在event.propertyName
上访问与事件关联的属性。
没有“transitionsend”事件,因此您可能需要一些技巧,例如仅过滤其中一个过渡属性的transitionend
回调处理。例如。:
function (event) {
if (event.propertyName == 'top') {
//put your code here
}
});
ps。没有浏览器会触发
MSTransitionEnd
事件。它是在MS文档中的某个时刻,但是在IE10 beta版本发布之前的某个时候,它被标准的transitionend
事件所取代。关于javascript - Transitionend事件触发两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18689031/