我有一个棘手的问题。当用户按下div
时,我想使用名称为div
的{{1}}添加css类,并使用css转换。然后,在短暂的超时后,我想处理.active
事件,我将从transitionend
删除课程.active
。问题是,如果用户按下按钮太快,比如说每秒15-20次,div
最终会停止射击。
您可以看到此效果here(clickable link),打开Chrome浏览器(我无法在FF中重现它)并尽快开始点击按钮。点击15-20后,transitionend
将停止触发。
我认为,当transitionend
处理程序仍然有效时,用户可以再次按下该按钮,div将获得transitionend
类,但不会触发.active
事件。问题是 - 是否可以编写防弹代码以仅使用transition
事件清除.active
类?
谢谢。
*编辑*嵌入式代码段
transitionend
var blk = document.querySelector('.animated-element');
var btn = document.querySelector('.button');
var ctr = document.querySelector('.click-counter');
var lgr = document.querySelector('.logger');
btn.addEventListener('click', function() {
var currentValue = Number(ctr.innerHTML);
ctr.innerHTML = ++currentValue;
if (!blk.classList.contains('active')) {
blk.classList.add('active');
}
});
blk.addEventListener('transitionend', function() {
blk.classList.remove('active');
var li = document.createElement('li');
li.innerHTML = 'Transition end';
lgr.appendChild(li);
});
.scene {
position: relative;
width: 300px;
height: 300px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.animated-element {
width: 200px;
height: 200px;
margin-bottom: 10px;
display: flex;
justify-content: center;
align-items: center;
font-size: 2em;
background-color: #ff0000;
color: white;
border-radius: 5px;
transition: all 500ms;
}
.animated-element.active {
font-weight: 700;
/* background-color: #ff0055; */
}
.button {
padding: 5px 10px;
border: 2px solid black;
border-radius: 5px;
text-align: center;
cursor: pointer;
user-select: none;
}
.click-counter {
position: absolute;
top: 0;
left: 0;
min-height: 17px;
min-width: 17px;
padding: 2px 4px;
color: gray;
font-weight: bold;
text-align: center;
border: 2px solid gray;
border-radius: 50%;
user-select: none;
}
.logger {
width: 300px;
padding: 0;
list-style: none;
text-align: center;
}