6日目:イメージの切り替え
イメージ図の切り替えは下記の通り
まずHTML,CSS,JSを下記の通り準備する。
<div class='center'> <div> <img src = 'img1.jpg' id='bigimg'> </div> <ul> <li><img src='thumb-img1.jpg' class='thumb' data-image='img1.jpg'></li> <li><img src='thumb-img2.jpg' class='thumb' data-image='img2.jpg'></li> <li><img src='thumb-img3.jpg' class='thumb' data-image='img3.jpg'></li> <li><img src='thumb-img4.jpg' class='thumb' data-image='img4.jpg'></li> </ul> </div>
section img{ max-width:100%; } .center{ margin: 0 auto 0 auto; max-width:90%; width:500px; } ul{ display:flex; margin:0; padding:0; list-style:none; } li{ flex:1 1 auto; margin-right:8px; } li:last-of-type{ margin-right:0px; }
const thumbs = document.querySelectorAll('.thumb'); thumbs.forEach(function(item,index){ item.onclick = function() { document.getElementById('bigimg').src= this.dataset.image; } });
上記の解説を行う。
querySelectorAllとは?
先日の項目でquerySelector自体は取り扱っているが、querySelectorは1つの要素しか取得することができない。
そのため、複数の要素を取得する際には下記のように行う。
document.querySelectorAll('CSSセレクタ');
上記の例だとCSSセレクタは.thumbが該当する。
これらのCSSセレクタで指定された要素全てを取得することができる。
配列の繰り返し
配列を繰り返し処理する方法として、forEachメソッドがある。これは下記のように書く。
配列.forEach(function(item,index){ 処理内容 });
これによりitemの部分に取得した要素が、indexにそれらの番号が0から入ることになる。
thisとは?
this は function を呼んだ時の . の前についているオブジェクトを指している
ただし、.の前に何もついていないときはwindowsオブジェクトを参照している。
(理解があいまいな為、補強の必要あり)
data-imageについて
ここではdata-imageと記載しているが、data-XXXとXXXの部分は好きに決めてよい。
これらのdata-XXXを読み取るためには
取得した要素.dataset.XXX
としてあげる必要がある。