teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コメント欄対応

2018/03/01 11:37

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -26,4 +26,35 @@
26
26
 
27
27
  そんなことはありません。
28
28
  JavaScriptのsetIntervalを始めとするイベントループの機能はとても優秀で、
29
- 発火すべきタイミングまでひたすらサボり続ける低燃費の設計になっています。
29
+ 発火すべきタイミングまでひたすらサボり続ける低燃費の設計になっています。
30
+
31
+ ---
32
+
33
+ 【おまけ】 コメント欄のコード
34
+
35
+ 外にあるi変数に依存しないようにしました。
36
+ こんな感じかなぁと思います。
37
+
38
+ ```JavaScript
39
+ // DOMを触るので描画完了まで遅延させたほうが良い
40
+ document.addEventListener("load", function () {
41
+ var items = [0, 1, 2, 3].map(function(it){ return document.getElementById('slide' + it); });
42
+ var fadeIn = function (i) {
43
+ items[i].classList.add('slide-fadein');
44
+ items[i].classList.remove('slide-fadeout');
45
+ }
46
+ var fadeOut = function (i) {
47
+ items[i].classList.add('slide-fadeout');
48
+ items[i].classList.remove('slide-fadein');
49
+ }
50
+ var slideShow = function (i) {
51
+ if (i => items.length) {
52
+ i = 0;
53
+ }
54
+ fadeIn(i);
55
+ fadeOut(i === 0 ? items.length - 1 : i - 1);
56
+ setTimeout(slideShow.bind(null, i + 1), 18000);
57
+ }
58
+ setTimeout(slideShow.bind(null, 0), 18000);
59
+ });
60
+ ```