我想了解为什么以下代码会以指数方式复制 transitionend 的返回。
这对我来说没有任何意义,因为它们应该具有相同的行为并且应该只执行一次。
下面评论了预期的行为。
(function() {
var animations = {
start: function() {
console.log('animations has started');
this.transition.run();
},
transition: {
duration: 500,
run: function() {
console.log('transitions is running');
const el = document.querySelector('.box');
el.classList.toggle('fadein');
// dont duplicate as expected !!!GOOD BEHAVIOR!!!
/*el.ontransitionend = function(){
console.log('transitionend triggered!');
};*/
// duplicates at every click !!!BAD BEHAVIOR!!!
el.addEventListener('transitionend', function() {
console.log('transitionend triggered');
}, false);
}
}
};
const bt = document.querySelector('button');
bt.addEventListener('click', () => {
animations.start();
})
})();
.box {
width: 100%;
height: 100vh;
background: green;
opacity: 0;
transition: opacity .5s linear;
}
.box.fadein {
opacity: 1;
}
<button>Start Transition</button>
<div class="box"></div>```
这是多么奇怪的行为!