我创建了一个显示文本“已复制!”的按钮。每次用户单击“复制”按钮时。我完成此操作的方法是将动画分配给相关标签,还使用setTimeout来“重置”动画。这样,当用户第二次或第三次单击按钮时,动画将再次播放。
但是,我确定这不是理想的解决方案,因为如果用户在setTimeout完成之前单击,则按钮“断开”直到2500ms过去。之后,它又可以工作了。
如何重构CSS / JS,以便“复制!”每次单击按钮时都会显示消息? (不受超时限制/延迟)
const copyURL = () => {
const copyDiv = document.querySelector(".copyAlert")
copyDiv.textContent = "Copied!";
copyDiv.style.animationName = "disappear";
copyDiv.style.animationDuration = "2.5s";
setTimeout(function(){
copyDiv.style.animationName = "none";
}, 2400);
};
.copyAlert {
opacity: 0;
}
@keyframes disappear {
30% {
opacity: 0;
}
60% {
opacity: 1;
}
100% {
opacity: 0;
}
}
<button onclick="copyURL()">Copy</button>
<span class="copyAlert"></span>
答案 0 :(得分:3)
1)使用animationend
事件
2)使用animate
类进行动画
3)不要使用JS插入“已复制!”文字,只需将其写在您的html中
const copyURL = () => {
const copyDiv = document.querySelector('.copyAlert:not(.animate)')
if(copyDiv) {
copyDiv.classList.add('animate');
copyDiv.addEventListener('animationend', () => copyDiv.classList.remove('animate') );
}
};
.animate { animation: disappear 2.5s linear; }
.copyAlert { opacity: 0; }
@keyframes disappear {
30% { opacity: 0; }
60% { opacity: 1; }
100% { opacity: 0; }
}
<button onclick="copyURL()">Copy</button>
<span class="copyAlert">Copied!</span>
答案 1 :(得分:0)
如果可能,请尝试使用setTimeOut()
函数setTimeOut
将您的文本从Copy
更改为Copied!
[How to change the button text on click for a short duration only using javascript?