[英]How to run .remove() after fade-out effect is completed?
我想运行“this.parentElement.remove();”这一行在 "this.parentElement.classList.add("fade-out"); 行之后已完成(淡出持续 1 秒)。
现在 .remove() 立即运行,因此不会显示淡出效果。
提前谢谢了!
var deleteItem = document.querySelectorAll("span");
for (var i = 0; i < deleteItem.length; i++) {
deleteItem[i].addEventListener("click", function(event){
this.parentElement.classList.add("fade-out");
this.parentElement.remove();
event.stopPropagation();
});
}
指定淡入超时函数的持续时间,完成后回调函数将执行
代码示例
const deleteItem = document.querySelectorAll("span"); const FADE_OUT_TIME = 2000; for (let i = 0; i < deleteItem.length; i++) { deleteItem[i].addEventListener("click", function(event) { event.stopPropagation(); this.classList.add("fade-out"); setTimeout(_ => this.remove(), FADE_OUT_TIME) }); }
.cursor-pointer { cursor: pointer; }
<span class="cursor-pointer">first</span> <span class="cursor-pointer">second</span> <span class="cursor-pointer">third</span>
一种方法是监听事件的transitionend
事件( 参考)。
let el = this.parentElement;
el.addEventListener('transitionend', () => el.remove());
el.classList.add("fade-out");
与监听超时相比,这种方法的吸引力意味着您不必在 JavaScript 中硬编码转换持续时间(如果您更改它,则必须同时更新 CSS 和 JavaScript。)事件将每当它结束时就开火,无论需要多长时间。
假设.fade-out
触发动画,您可以向元素添加一个animationend
来实现这一点...回调在任何动画结束后调用
var deleteItem = document.querySelectorAll("span");
for (var i = 0; i < deleteItem.length; i++) {
deleteItem[i].addEventListener("click", function(event) {
this.parentElement.addEventListener("animationend", function() {
this.parentElement.remove();
});
this.parentElement.classList.add("fade-out");
event.stopPropagation();
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.