前提・実現したいこと
お世話になります。自らコードを書いていて挙動の違いの原因が理解できずにおります。
アドバイスいただけると助かります。
タブの切り替えをJSで実装しようとしております。結果的に意図した挙動になるようにコードがかけたのですが、
なぜ意図したものと意図しないものの違いが生まれるのかいまいち理解できずにいます。
意図した挙動にならない場合はタブの切り替えの際にis-shownクラスが外れず二重にPanelが表示されます。
document.getElementsByClassName('disp')を変数に代入するか、むき出し?のままで使うかによってこの違いが生まれていると思うのですが、なぜそうなるのかがいまいち理解できません。確かに、意図しないコードの方だとPanel2のis-shownクラスを外すためのコードが書かれていないので、当然is-shownが重複で表示されると言うことは理解できます。逆に意図したコードの方のis-shownの付け外しが、変数を使うか、むき出しのまま使うかどうかに影響されているのかなと思っているのですが、いまいちピンと来ません。よろしくお願いします。
意図した挙動になるJSコード
function tabswitch() { document.getElementsByClassName('is-shown')[0].classList.remove('is-shown'); tab = Array.prototype.slice.call(tab); const index = tab.indexOf(this); document.getElementsByClassName('disp')[index].classList.add('is-shown'); }
意図した挙動にならなかったJSコード
function tabswitch() { const disp = document.getElementsByClassName('disp'); disp[0].classList.remove('is-shown'); tab = Array.prototype.slice.call(tab); let index = tab.indexOf(this); disp[index].classList.add('is-shown'); }
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Practice</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <div class="select"> <div class="tab">button1</div> <div class="tab">button2</div> </div> <div class="panel"> <div class="disp hidden is-shown">panel1</div> <div class="disp hidden">panel2</div> </div> <script src="js/main.js"></script> </body> </html>
CSS
.panel { position: relative; } .disp { position: absolute; height: 200px; /* background: white; */ } .hidden { visibility: hidden; } .hidden.is-shown { visibility: visible; }
回答2件
あなたの回答
tips
プレビュー