我想在click事件中删除div元素,但我想用淡出效果删除它。我有一些JQuery解决方案,但我需要纯JavaScript或CSS解决方案。
document.querySelector('.list').addEventListener("click", function(e){
if (e.target.localName === "span") {
var removeTarget = e.target.parentNode.parentNode;
removeTarget.parentNode.removeChild(removeTarget);
};
});
此代码正在删除div元素而不起作用。如何添加淡出效果?
答案 0 :(得分:10)
有两种方法可以实现这一点:CSS3动画或jQuery动画。
在CSS文档中,添加:
.list {
opacity: 1;
-webkit-transition: opacity 1000ms linear;
transition: opacity 1000ms linear;
}
将JavaScript的第4行更改为:
removeTarget.style.opacity = '0';
setTimeout(function(){removeTarget.parentNode.removeChild(removeTarget);}, 1000);
注意:确保CSS3过渡时间和setTimeout相同。
获取jQuery
将您的Javascript第4行更改为:
removeTarget.fadeOut(1000)
答案 1 :(得分:7)
我之前为个人项目做过这个功能:
function removeFadeOut( el, speed ) {
var seconds = speed/1000;
el.style.transition = "opacity "+seconds+"s ease";
el.style.opacity = 0;
setTimeout(function() {
el.parentNode.removeChild(el);
}, speed);
}
removeFadeOut(document.getElementById('test'), 2000);
答案 2 :(得分:2)
在2020年,您可以将the animation end event的setTimeout
弃用,这样就无需在两个地方维护持续时间:
.fade-out {
animation: fade 2s;
-webkit-animation: fade 2s;
-moz-animation: fade 2s;
}
/* Animate opacity */
@keyframes fade {
from { opacity: 1 }
to { opacity: 0 }
}
@-moz-keyframes fade {
from { opacity: 1 }
to { opacity: 0 }
}
@-webkit-keyframes fade {
from { opacity: 1 }
to { opacity: 0 }
}
const elementToFade = document.getElementById('my-element');
elementToFade.onanimationend = (e) => {
if (e.srcElement.classList.contains('fade-out')) {
elementToFade.parentNode.removeChild(elementToFade);
}
};
// To fade away:
elementToFade.classList.add('fade-out');
答案 3 :(得分:1)
使用elem.className =“my-animation”将以下CSS类添加到元素中;点击:
.my-animation {
animation: fade 3s steps(90) forwards;
-webkit-animation: fade 3s steps(90) forwards;
-moz-animation: fade 3s steps(90) forwards;
}
@keyframes fade {
from {
opacity: 1;
}
to {
opacity: 0.0;
}
}
您也可以通过修改步骤(数字)来控制动画的速度。
答案 4 :(得分:0)
只需转到jQuery源代码,取出纯JavaScript中的fade
代码,然后使用它,无需重新发明轮子,
或提示使用setTimeInterval()
或css解决方案是使用transform
和transition
属性
答案 5 :(得分:0)
这是一个很好的问题,但要在html中设置一些元素的动画,这个元素必须在动画时存在。所以,你有一些方法可以做到这一点,一个好方法是用CSS隐藏这个元素,在动画之后删除这个元素。当你隐藏你可以动画时,你可以看到这个例子:
<style>
.hide{
opacity: 0;
}
.fade-out {
transition:1s linear all;
}
</style>
<span class="list fade-out">
This is a List, click me to hide
</span>
<script>
document.querySelector('.list').addEventListener("click", function(e) {
if (e.target.localName === "span") {
//Add CSS hide and animate with fade out
var currentCSS = this.className;
this.className = currentCSS + ' hide';
var removeTarget = e.target.parentNode.parentNode;
setTimeout(function(){
removeTarget.parentNode.removeChild(removeTarget);
},1000);
};
});
</script>
&#13;