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

时间:2015-10-29 20:37:16

标签: javascript html 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);
    };
});

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

6 个答案:

答案 0 :(得分:10)

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

CSS3动画

  1. 在CSS文档中,添加:

    .list {
        opacity: 1;
        -webkit-transition: opacity 1000ms linear;
        transition: opacity 1000ms linear;
    }
    
    • 这会使您对项目的不透明度的任何更改都会消失1000毫秒。
  2. 将JavaScript的第4行更改为:

    removeTarget.style.opacity = '0';
    setTimeout(function(){removeTarget.parentNode.removeChild(removeTarget);}, 1000);
    
    • 这会使您的项目将不透明度更改为0,从而使步骤1的转换生效。然后它会在1000ms后用你的代码删除该项目。
  3. 注意:确保CSS3过渡时间和setTimeout相同。

    jQuery动画

    1. 获取jQuery

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

      removeTarget.fadeOut(1000)
      
      • 这会将您的项目淡出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 eventsetTimeout弃用,这样就无需在两个地方维护持续时间:

.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()

将div的高度缓慢降低到0

或css解决方案是使用transformtransition属性

答案 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;
&#13;
&#13;