数秒後にdivを非表示にする


123

疑問に思っていましたが、jqueryで数秒後にdivを非表示にするにはどうすればよいですか?たとえばGmailのメッセージのように。

最善を尽くしましたが、機能させることができません。


1
隠すだけで十分ですか、それとも色あせする必要がありますか?
Joel Coehoorn、2009年

回答:


247

これにより、1秒(1000ミリ秒)後にdivが非表示になります。

setTimeout(function() {
    $('#mydiv').fadeOut('fast');
}, 1000); // <-- time in milliseconds
#mydiv{
    width: 100px;
    height: 100px;
    background: #000;
    color: #fff;
    text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv">myDiv</div>

フェードせずに単に非表示にする場合は、を使用しますhide()


2
そして、あなたは狂っ殴られてきたジョエルCoehoornをワンショットで非常にうまく!:)
cregox

3
@James、確かに最終結果に違いはありませんが、を使用した実装.delay()はの方が「ネイティブ」でエレガントだと思いますjQuery
ポールT.ローキーン2012

あなたは置き換えることができ.fadeOut('fast').hide()div要素の瞬間を隠すために。
ラプター、2013年

90

あなたは試すことができます .delay()

$(".formSentMsg").delay(3200).fadeOut(300);

divを呼び出して、ミリ秒単位で遅延時間を設定し、変更するプロパティを設定します。この場合、アニメーション化できるように.fadeOut()を使用しましたが、.hide()も使用できます。

http://api.jquery.com/delay/


7
これは、setTimeoutを使用する必要がなく、コードが読みやすいため、より適切です。
Marek Bar

12

jqueryは、インターバルタイマーや他のイベントハンドラーをセットアップして後でクリアまたはリセットする必要のない、時間指定された方法でdivを非表示にするさまざまなメソッドを提供します。ここにいくつかの例があります。

純粋な皮、1秒の遅延

// hide in one second
$('#mydiv').delay(1000).hide(0); 

純粋な皮、遅延なし

// hide immediately
$('#mydiv').delay(0).hide(0); 

アニメーション非表示

// start hide in one second, take 1/2 second for animated hide effect
$('#mydiv').delay(1000).hide(500); 

フェードアウト

// start fade out in one second, take 300ms to fade
$('#mydiv').delay(1000).fadeOut(300); 

さらに、メソッドはキューの名前または関数を2番目のパラメーターとして使用できます(メソッドによって異なります)。上記のすべての呼び出しとその他の関連する呼び出しのドキュメントは、https//api.jquery.com/category/effects/にあります。


10

これを行うには本当に簡単な方法があります。

問題は、.delayがアニメーションにのみ影響するため、.hide()に期間を与えることでアニメーションのように動作させることです。

$("#whatever").delay().hide(1);

短い持続時間を与えることで、通常の.hide関数と同じように瞬時に表示されます。



3

jQueryタイマーを使用すると、オブジェクトに関連付けられているタイマーに名前を関連付けることもできます。したがって、オブジェクトにいくつかのタイマーをアタッチして、それらのいずれかを停止することができます。

$("#myid").oneTime(1000, "mytimer1" function() {
  $("#something").hide();
}).oneTime(2000, "mytimer2" function() {
  $("#somethingelse").show();  
});

$("#myid").stopTime("mytimer2");

eval関数(およびその関連関数、Function、setTimeout、setInterval)は、JavaScriptコンパイラへのアクセスを提供します。これは必要な場合もありますが、ほとんどの場合、非常に悪いコーディングの存在を示しています。eval関数は、JavaScriptの最も誤用されている機能です。

http://www.jslint.com/lint.html


2

おそらく最も簡単な方法は、タイマープラグインを使用することです。 http://plugins.jquery.com/project/timersそして、次のようなものを呼び出します

$(this).oneTime(1000, function() {
    $("#something").hide();
  });

1
setTimeoutまたはsetIntervalよりもタイマープラグインを使用する説得力のある理由はありますか?
消費者、2009年

2
jQueryプラグインのダウンロードとアタッチは、単にsetTimeoutを使用するよりも簡単ではないと思います。
ネイサンリドリー、

1
これは必ずしも悪いことだとは思いませんが、コードでタイマーを使用することはほとんどないため、そのプラグインを(数回:追加のコード、膨張)使用しても、コストを上回ることはありません。タイマーを使用する必要がある多くのコードを記述していて、jQueryを使用している場合、このプラグインがjQuery構文を維持するのに非常に役立つ理由がわかります...
Jason Bunting


0
<script>
      $(function() {
      $(".hide-it").hide(7000);
    });              
</script>

<div id="hide-it">myDiv</div>

回答としてコードだけを投稿するのではなく、コードが何をするか、それが質問の問題をどのように解決するかについての説明も提供してください。説明付きの回答は、通常、より有用で質が高く、賛成票を集める可能性が高くなります。
Mark Rotteveel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.