ドットインストールの「jQueryで作るスライドショー」をJavaScriptで書いてみた - Qiita
のさらに書き直しです。インデントのついたコメント部分に jQueryで作るスライドショー (全8回) - プログラミングならドットインストール のソースを載せています。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>jQueryを使わずスライドショー</title> <style> body { margin: 10px auto; text-align: center; } img { width: 50%; } .thumbnail { width: 125px; height: 83px; opacity: 0.5; cursor: pointer; } .current { opacity: 1.0; } .thumbnail + .thumbnail { // 隣接セレクタ margin-left: 4px; } </style> </head> <body> <div id="thumbnails"></div> <div id="main"></div> <div id="nav"> <button id="prev">« 前へ</button> <button id="next">次へ»</button> <button id="play">再生</button> <button id="stop">停止</button> </div> <script> //変数の定義、ファイルを配列格納 // DOM読み込み後(DOMContentLoadedイベント発生後)に実行するので // $(function() {}); // の中に記載する。 var files = [ 'img/photo01.jpg', 'img/photo02.jpg', 'img/photo03.jpg', 'img/photo04.jpg' ]; var img; var timer; var currentNum = 0; var nowPlaying = false; //配列から動的にimageを表示するためのHTMLを作成 for(var i = 0; i < files.length; i++) { img = document.createElement('img'); img.src = files[i]; img.className = 'thumbnail'; // img = $('<img>').attr('src', files[i]).addClass('thumbnail'); document.getElementById("thumbnails").appendChild(img); // $('#thumbnails').append(img); } img = document.createElement('img'); img.src = files[0]; var mainImg = document.getElementById('main').appendChild(img); // $('#main').append( // $('<img>').attr('src', files[0]); // ); var imgs = document.getElementsByClassName('thumbnail'); // $('.thumbnail') に相当 imgs[0].className = 'thumbnail current'; // $('.thumbnail:first').addClass('current'); var n = document.getElementById('main').getElementsByTagName('img')[0]; // $('#main img') に相当 for(var i = 0; i < imgs.length; i++) { imgs[i].addEventListener("click", function() { n.src = this.src; for(var j = 0; j < imgs.length; j++) { imgs[j].classList.remove('current'); } // sibli^Qngs().removeClass('current') に相当 this.className = 'thumbnail current'; // $(this).addClass('current') に相当 for(var j = 0; j < imgs.length; j++) { if(imgs[j].classList[1] == "current") { currentNum = j; } } // currentNum = $(this).index() に相当 }); } // $('.thumbnail').click(function() { // $('#main img').attr('src', $(this).attr('src')); // currentNum = $(this).index(); // $(this).addClass('current').sibli^Qngs().removeClass('current'); // }); //前へボタンの実装 var prev = document.getElementById('prev'); prev.addEventListener("click", function() { currentNum--; if(currentNum < 0) { currentNum = files.length - 1; } n.src = files[currentNum]; for(var j = 0; j < imgs.length; j++) { imgs[j].classList.remove('current'); } imgs[currentNum].className = 'thumbnail current'; }); // $('#prev').click(function() { // currentNum--; // if(currentNum < 0) { // currentNum = files.length - 1; // } // $('#main img').attr('src', files[currentNum]); // $('.thumbnail').removeClass('current'); // $('.thumbnail').eq(currentNum).addClass('current'); // }): //次へボタン実装 var next = document.getElementById('next'); next.addEventListener("click", function() { currentNum++; if(currentNum > files.length - 1) { currentNum = 0; } n.src = files[currentNum]; for(var j = 0; j < imgs.length; j++) { imgs[j].classList.remove('current'); } imgs[currentNum].className = 'thumbnail current'; }); // $('#next').click(function() { // currentNum++; // if(currentNum > files.length - 1) { // currentNum = 0; // } // $('#main img').attr('src', files[currentNum]); // $('.thumbnail').removeClass('current'); // $('.thumbnail').eq(currentNum).addClass('current'); // }): //一定時間でスライドしていく機能実装 function autoPlay() { next.click(); timer = setTimeout(function() { autoPlay(); }, 1000); } // function autoPlay() { // $('#next').click(); // timet = setTimeout(function() { // autoPlay(); // }, 1000); //再生ボタンでスライドショー動作 document.getElementById('play').addEventListener("click", function() { if (nowPlaying) return; nowPlaying = true; autoPlay(); }); // $('#play').click(function() { // if (nowPlaying) return; // nowPlaying = true; // autoPlay(); // }); //停止ボタンでスライドショーを止める document.getElementById('stop').addEventListener("click", function() { clearTimeout(timer); nowPlaying = false; }); // $('#stop').click(function() { // clearTimeout(timer); // nowPlaying = false; // }); </script> </body> </html>