クリックイベントで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要素を削除しています。フェードアウト効果を追加するにはどうすればよいですか?
これを実現するには、CSS3アニメーションまたはjQueryアニメーションの2つの方法があります。
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)
私は個人的なプロジェクトのためにこの関数を少し前に作りました:
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);
良い質問ですが、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>
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;
}
}
同様に、steps(number)を変更することで、アニメーションの速度を制御できます。
単に jQuery ソースコードに移動し、純粋なJavaScriptにあるfade
コードを取り出して、それを使用します。ホイールを再発明する必要はありません。
または、ヒントはsetTimeInterval()
を使用してdivの高さをゆっくり0に減らします
またはCSSソリューションはtransform
とtransition
プロパティを使用することです