回答編集履歴

3

\.queue\(\) \+ \.delay\(\)

2017/06/07 11:51

投稿

think49
think49

スコア18166

test CHANGED
@@ -64,4 +64,40 @@
64
64
 
65
65
 
66
66
 
67
+ ### .queue() + .delay()
68
+
69
+
70
+
71
+ 「`.delay()` でも、`.queue()` を組み合わせれば可能」というアドバイスを頂き、書いてみました。
72
+
73
+
74
+
75
+ - [.queue().delay().queue() - JSFiddle](https://jsfiddle.net/jo8dc2r5/)
76
+
77
+
78
+
79
+ ```HTML
80
+
81
+ <p class="foo">foo</p>
82
+
83
+ <script>
84
+
85
+ 'use strict';
86
+
87
+ jQuery('.foo').queue(new Function).delay(1000).queue(function () {
88
+
89
+ jQuery(this).addClass('open');
90
+
91
+ }).dequeue();;
92
+
93
+ </script>
94
+
95
+ ```
96
+
97
+
98
+
99
+ 一応できましたが、`delay()` からキューを実行できないようで事前に何もしない `queue(new Function)` を宣言しており、やや冗長なコードとなりました。
100
+
101
+
102
+
67
103
  Re: kirimi_ さん

2

\.delay\(\) は \.addClass\(\) に適用できない

2017/06/07 11:51

投稿

think49
think49

スコア18166

test CHANGED
@@ -1,3 +1,7 @@
1
+ ### どちらでも良い (間違い)
2
+
3
+
4
+
1
5
  > 調べたらsetTimeoutやdelay使うとよいとのことですが、色々使い方はあるのでしょうがどれがふさわかしいか分からず。。
2
6
 
3
7
 
@@ -6,8 +10,58 @@
6
10
 
7
11
 
8
12
 
13
+ **(2017/06/07 16:06追記)**
14
+
15
+ `.delay()` は `.addClass()` に適用できないとの指摘を受け、公式ドキュメントを読んだところ、確かにその通りである事を確認しました。詳細は後述。
16
+
17
+
18
+
19
+ ### .delay()
20
+
21
+
22
+
9
23
  - [.delay() | jQuery API Documentation](https://api.jquery.com/delay/)
10
24
 
11
25
 
12
26
 
27
+ 機械翻訳「バージョン1.4のjQueryに追加された.delay()メソッドは、キュー内でそれに続く関数の実行を遅らせることができます。これは、標準エフェクトキューまたはカスタムキューで使用できます。キュー内の後続のイベントだけが遅延します。たとえば、エフェクトキューを使用しない.show()または.hide()の引数なしのフォームを遅延させることはありません。」
28
+
29
+
30
+
31
+ 期間はミリ秒単位で指定します。値が大きいほどアニメーションが遅くなり、遅いアニメーションは速いアニメーションでないことを示します。 'fast'と 'slow'という文字列は、それぞれ200ミリ秒と600ミリ秒の持続時間を示すために供給することができます。
32
+
33
+
34
+
35
+ 標準エフェクトキューを使用すると、たとえば、<div id = "foo">の.slideUp()と.fadeIn()の間に800ミリ秒の遅延を設定できます。」
36
+
37
+
38
+
39
+ ここで書かれている標準エフェクトキュー、カスタムエフェクトキューは下記リンク先にあるAPIを指します。
40
+
41
+
42
+
43
+ - [Basics | jQuery API Documentation](https://api.jquery.com/category/effects/basics/)
44
+
45
+ - [Custom | jQuery API Documentation](https://api.jquery.com/category/effects/custom-effects/)
46
+
47
+
48
+
49
+ `.addClass()` はこれに含まれない為、`.delay()` を適用することは出来ません。
50
+
51
+ 従って、`setTimeout()` の一択となります。
52
+
53
+
54
+
55
+ ```JavaScript
56
+
57
+ setTimeout(function (event) {
58
+
59
+ jQuery(event.currentTarget).addClass('open');
60
+
61
+ }, 5000, event);
62
+
63
+ ```
64
+
65
+
66
+
13
67
  Re: kirimi_ さん

1

markdown修正

2017/06/07 07:06

投稿

think49
think49

スコア18166

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 結果は同じなので、どちらでも良いと思いますが、jQuery をお使いなら、`.delay()` を使用する方が「らしい」といえるかもしれませんね。
5
+ 「**結果は同じなので、どちらでも良い**」と思いますが、jQuery をお使いなら、`.delay()` を使用する方が「らしい」といえるかもしれませんね。
6
6
 
7
7
 
8
8