我有一个棘手的问题。当用户按下 a 时,div
我想使用 css 转换添加一个div
带有 name的 css 类.active
。然后,在短暂的超时后,我想处理transitionend
从.active
. div
问题是,如果用户太快按下按钮,比如每秒 15-20 次,transitionend
最终会停止触发。
你可以在这里看到这个效果(可点击的链接),打开 Chrome 浏览器(我无法在 FF 中重现它)并尽可能快地开始点击按钮。15-20 次点击transitionend
后将停止触发。
我认为,当transitionend
处理程序仍在工作时,用户可以再次按下按钮,div 将获得.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;
}
<body>
<main>
<div class="scene">
<div class="click-counter">0</div>
<div class="animated-element">
<span>ABC</span>
</div>
<div class="button">
Press me several times
</div>
</div>
<ul class="logger"></ul>
</main>
</body>