回答編集履歴

1

かみくだく

2019/04/08 10:39

投稿

yambejp
yambejp

スコア114843

test CHANGED
@@ -81,3 +81,115 @@
81
81
  </div>
82
82
 
83
83
  ```
84
+
85
+
86
+
87
+ # すこし噛み砕いて
88
+
89
+ ```javascript
90
+
91
+ <style>
92
+
93
+ .card{display:none}
94
+
95
+ .card.active{display:block;}
96
+
97
+ </style>
98
+
99
+ <script>
100
+
101
+ window.addEventListener('DOMContentLoaded', function(e){
102
+
103
+ if(!document.querySelector('.card.active')){ // .cardの中に.activeクラスがついた要素がなければ
104
+
105
+ document.querySelector('.card').classList.add('active'); // .cardの先頭要素にactiveクラスをつける
106
+
107
+ }
108
+
109
+ var cards=document.querySelectorAll('.card'); // .cardをcardsで受けておく
110
+
111
+ var buttons=document.querySelectorAll('.button'); // .buttonをbuttonsで受けておく
112
+
113
+ [].forEach.call(buttons,function(x){ // buttonsから要素を1つずつxとして受け取ってループ
114
+
115
+ x.addEventListener('click',function(e){ // xのclickイベントを拾って動作を指定
116
+
117
+ var button=e.target.id; // 押されたボタンのidを拾っておく
118
+
119
+ var len=cards.length -1; // cardsの要素数を拾って1引く=最大値のインデックス
120
+
121
+ var idxs=[].map.call(cards,function(x){ // cardsから要素を1つずつxとして受け取って
122
+
123
+ return x.classList.contains('active')?1:0; // activeクラスを持っていたら1そうでなければ0を返す
124
+
125
+ });
126
+
127
+ var idx=idxs.indexOf(1); // idxs配列から値が1のインデックスを返す
128
+
129
+ if(button=="prev"){ // ボタンのidがprevだったら
130
+
131
+ --idx; // idxをデクリメントし
132
+
133
+ if(idx<0){ // idxが0未満になったら
134
+
135
+ idx=len; // idxを最大値のインデックスであるlenに変える
136
+
137
+ }
138
+
139
+ }
140
+
141
+ if(button=="next"){ // ボタンのidがnextだったら
142
+
143
+ ++idx; // idxをインクリメントし
144
+
145
+ if(idx>len){ // idxが最大値のインデックスであるlenを超えたら
146
+
147
+ idx=0; // 0にする
148
+
149
+ }
150
+
151
+ }
152
+
153
+ [].forEach.call(cards,function(x,y){ // cardsから要素を1つずつx、そのインデックスをyで受け取り
154
+
155
+ if(y==idx){ // yとidxが同じなら
156
+
157
+ x.classList.add('active'); // xのクラスにactiveを付加
158
+
159
+ }else{ // そうでないなら
160
+
161
+ x.classList.remove('active'); // xのクラスからactiveを削除
162
+
163
+ }
164
+
165
+ });
166
+
167
+
168
+
169
+ });
170
+
171
+ });
172
+
173
+ });
174
+
175
+ </script>
176
+
177
+ <div class="stage">
178
+
179
+ <div id="prev" class="button">prev</div>
180
+
181
+ <ul id="cards">
182
+
183
+ <li id="check" class="card">1</li>
184
+
185
+ <li id="retry" class="card">2</li>
186
+
187
+ <li id="last" class="card">3</li>
188
+
189
+ </ul>
190
+
191
+ <div id="next" class="button">next</div>
192
+
193
+ </div>
194
+
195
+ ```