如何在JavaScript中删除淡出效果的div?

Par*_*hAn 6 html javascript css animation fade

我想删除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);
    };
});
Run Code Online (Sandbox Code Playgroud)

此代码正在删除div元素而不起作用.如何添加淡出效果?

Jak*_*r00 13

有两种方法可以实现这一点:CSS3动画或jQuery动画.

CSS3动画

  1. 在CSS文档中,添加:

    .list {
        opacity: 1;
        -webkit-transition: opacity 1000ms linear;
        transition: opacity 1000ms linear;
    }
    
    Run Code Online (Sandbox Code Playgroud)
    • 这将使您的项目的不透明度的任何变化淡出1000毫秒.
  2. 将JavaScript的第4行更改为:

    removeTarget.style.opacity = '0';
    setTimeout(function(){removeTarget.parentNode.removeChild(removeTarget);}, 1000);
    
    Run Code Online (Sandbox Code Playgroud)
    • 这将使您的项目将不透明度更改为0,从而使步骤1的转换生效.然后它会在1000ms后用你的代码删除该项目.

注意:确保CSS3转换的时间和setTimeout相同.

jQuery动画

  1. 获取jQuery

    • 转到jQuery网站下载它,或者
    • 在任何jQuery代码之前在HTML文档中添加`.
  2. 将您的Javascript第4行更改为:

    removeTarget.fadeOut(1000)
    
    Run Code Online (Sandbox Code Playgroud)
    • 这将淡出您的项目1000毫秒,您可以将此时间更改为您想要的任何内容.

  • @PariShKhAn很高兴我能提供帮助,为了表明这是有效的,并且为了将来的参考,你可以按我帖子左上方的复选标记按钮接受它. (2认同)

Lee*_*Gee 9

2020 年,您可以放弃使用setTimeout事件animationend,从而无需在两个地方维护持续时间:

.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.target.classList.contains('fade-out')) {
    elementToFade.parentNode.removeChild(elementToFade);
  }
};

// To fade away:
elementToFade.classList.add('fade-out');
Run Code Online (Sandbox Code Playgroud)


alv*_*dms 8

我不久前为个人项目做了这个功能:

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);
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案!顺便说一句,您实际上不需要计算可以在转换中使用“ms”的秒数。 (2认同)
  • @pheianox 尽管您对答案的编辑提高了代码的清晰度和简单性,但最好 [发表评论](https://meta.stackexchange.com/questions/19756/how-do-comments-work) 而不是更改答案(顺便说一句:请参阅“1000”毫秒中的问题,答案中的函数调用以“2000”毫秒为单位。 (2认同)