【JS】Javascriptでパラパラ画像表示(制御ボタン付き)を作ってみる
2018/09/10
2枚以上の画像をパラパラと切り替えるスクリプトをjavascriptで作ってみましたので、ご紹介。
ごくごく簡単なイメージギャラリーのようなイメージです。
パラパラ画像切替スクリプト
デモ
https://lightning-bolt.xyz/js/jquery.tgPara2Image/
※jQuery必須です。
スクリプト
HTML
画像ファイルの名称を「img1.jpg」から「img10.jpg」として、imgフォルダに設置します。
htmlには最初に表示したい画像(start.jpg)を配置します。
1 2 3 4 5 6 7 |
<div id="tgPara2Images"> <img src="img/start.jpg" alt="Image0" id="paraImage"> <form> <input type="button" value="START" id="startButton"> <input type="button" value="STOP" id="stopButton"> </form> </div> |
Javascript
画像10枚を配列にセットし、setInterval() で画像の切り替え処理を繰り返しているだけです。
切り替えに関しては、パスを含む画像名を配列にセットし、ループごとに画像名の数字をカウントアップするしようとしています。
この辺りはjQueryの画像インデックスを利用するなど他にもやりようはあると思いますが、簡単に配列を作成する方式をとりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<script> $(function() { var imgs = new Array(); var cnt = 10; // 画像枚数 var speed = 1000; // ミリ秒(1秒=1000) var start = 0; var timerName; for (i=0; i<cnt; i++) { imgs[i] = './img/img'+ (i+1) +'.jpg'; } //timerName = setInterval(pars2images, speed); // 自動的に開始する場合はコメント外す // パラパラ実行 function pars2images() { $("#paraImage").attr("src", imgs[start]); start++; if (start >= imgs.length) { start = 0; } } // スタート $("#startButton").click(function(){ timerName = setInterval(pars2images, speed); }) // ストップ $("#stopButton").click(function(){ if (timerName) { clearInterval(timerName); } }); }); </script> |
(2015.11.21追記) 制御ボタンをつけてみた
「スタート」「ストップ」だけでは味気ないので、コマ送り、最初、最後に戻れるボタンをつけてみました。
それとも無い、start画像を用意し、JSを若干ではありますが改修しています。
デモ
https://lightning-bolt.xyz/js/jquery.tgPara2Image/index2.html
スクリプト
HTML
初回時やリロード後しか表示しない初期画像(start.jpg)を配置。
スタート、ストップに加え、
- 「<<」最初
- 「<」前
- 「>」次
- 「>>」最後
ボタンを追加します。
1 2 3 4 5 6 7 8 9 10 11 |
<div id="tgPara2Images"> <img src="img/start.jpg" alt="startImage" id="paraImage"> <form> <input type="button" value="START" id="startButton"> <input type="button" value="STOP" id="stopButton"><br> <input type="button" value="<<" id="firstButton"> <input type="button" value="<" id="prevButton"> <input type="button" value=">" id="nextButton"> <input type="button" value=">>" id="lastButton"> </form> </div> |
Javascript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
<script> $(function() { var imgs = new Array(); var cnt = 10; // 画像枚数 var speed = 1000; // ミリ秒(1秒=1000) var now = -1; var timerName; for (i=0; i<cnt; i++) { imgs[i] = './img/img'+ (i+1) +'.jpg'; } //timerName = setInterval(pars2images, speed); // 自動的に開始する場合はコメント外す // パラパラ実行 function pars2images() { now++; $("#paraImage").attr("src", imgs[now]); if (now >= imgs.length-1) { now = -1; } } // 次 $("#nextButton").click(function(){ now++; if (now == imgs.length) { now = 0; } $("#paraImage").attr("src", imgs[now]); }); // 前 $("#prevButton").click(function() { now--; if (now == -1) { now = cnt-1; } $("#paraImage").attr("src", imgs[now]); }); // スタート $("#startButton").click(function(){ timerName = setInterval(pars2images, speed); }) // ストップ $("#stopButton").click(function(){ if (timerName) { clearInterval(timerName); } }); // 最初 $("#firstButton").click(function(){ now = 0; $("#paraImage").attr("src", imgs[now]); }); // 最後 $("#lastButton").click(function(){ now = cnt-1; $("#paraImage").attr("src", imgs[now]); }); }); </script> |
デモ1と違うところは、表示するファイルを定義いる配列番号のカウントアップ(及びダウン)のタイミング。
デモ1は表示後にカウントアップしていますが、デモ2は表示前にカウントアップし、アップ後の配列番号内容を参照するようにしています。
なので、最初の変数定義で now に -1 を持たせています。
作りこむ段階でその方が分かりやすかったので、採用しました。
パラパラ実行のあとは、各制御ボタンをクリックイベントでそれぞれの処理を行っているだけの、相変わらずのシンプルな内容となっています。
拡張していく基礎のようなスクリプトかな、と自分では思っています。
いわゆるイメージギャラリー(のようなもの)ですが、こんな簡単に出来るものなのですねぇ。