JS 部分:
function removeTransition(e) {
if (e.propertyName !== 'transform') return;
e.target.classList.remove('playing');
}
keys.forEach(key => key.addEventListener('transitionend', removeTransition));
css 部分:
.key {
transition: all .07s ease;
}
.playing {
box-shadow: 0 0 1rem #ffc600;
transform: scale(1.1);
border-color: #ffc600;
}
其余还有部分代码,主要是监听键盘上的keydown
事件,当某个key
被按下后,执行:
key.classList.add('playing');
我不清除的是,removeTransition
在什么时候被调用?以及 .remove('playing')
之后,新的样式在什么时候渲染?
查到浏览器在处理 css 的时候,会先终止 JS 的执行。那 transitioned
事件在什么时候被触发?
transitionend
事件会在 CSS transition 结束后触发。在你的例子中,
transitionend
确实会多次触发。比如
那么
transitionend
事件会被触发 4 次。如果在中途取消了过渡动画,那么
transitionend
就不会触发。或者 transition 完成前设置display
为"none"
,事件同样不会被触发。