どちらでも良い (間違い)
調べたらsetTimeoutやdelay使うとよいとのことですが、色々使い方はあるのでしょうがどれがふさわかしいか分からず。。
「結果は同じなので、どちらでも良い」と思いますが、jQuery をお使いなら、.delay()
を使用する方が「らしい」といえるかもしれませんね。
(2017/06/07 16:06追記)
.delay()
は .addClass()
に適用できないとの指摘を受け、公式ドキュメントを読んだところ、確かにその通りである事を確認しました。詳細は後述。
.delay()
機械翻訳「バージョン1.4のjQueryに追加された.delay()メソッドは、キュー内でそれに続く関数の実行を遅らせることができます。これは、標準エフェクトキューまたはカスタムキューで使用できます。キュー内の後続のイベントだけが遅延します。たとえば、エフェクトキューを使用しない.show()または.hide()の引数なしのフォームを遅延させることはありません。」
期間はミリ秒単位で指定します。値が大きいほどアニメーションが遅くなり、遅いアニメーションは速いアニメーションでないことを示します。 'fast'と 'slow'という文字列は、それぞれ200ミリ秒と600ミリ秒の持続時間を示すために供給することができます。
標準エフェクトキューを使用すると、たとえば、<div id = "foo">の.slideUp()と.fadeIn()の間に800ミリ秒の遅延を設定できます。」
ここで書かれている標準エフェクトキュー、カスタムエフェクトキューは下記リンク先にあるAPIを指します。
.addClass()
はこれに含まれない為、.delay()
を適用することは出来ません。
従って、setTimeout()
の一択となります。
JavaScript
1setTimeout(function (event) {
2 jQuery(event.currentTarget).addClass('open');
3}, 5000, event);
.queue() + .delay()
「.delay()
でも、.queue()
を組み合わせれば可能」というアドバイスを頂き、書いてみました。
HTML
1<p class="foo">foo</p>
2<script>
3'use strict';
4jQuery('.foo').queue(new Function).delay(1000).queue(function () {
5 jQuery(this).addClass('open');
6}).dequeue();;
7</script>
一応できましたが、delay()
からキューを実行できないようで事前に何もしない queue(new Function)
を宣言しており、やや冗長なコードとなりました。
Re: kirimi_ さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/07 04:41
2017/06/07 05:13
2017/06/07 06:27
2017/06/07 07:11
2017/06/07 07:15
2017/06/07 07:22
2017/06/07 07:55
2017/06/07 11:54 編集
2017/06/07 12:08
2017/06/07 12:14
2017/06/07 12:18
2017/06/07 12:27