JavaScriptのsetInterval()でアニメーションの初歩
- 2013/08/27
またまたsetInterval()ネタです。
今回は、画像の座標を変更することで移動させます。更にボタンでON/OFFします。
先日書いた「JavaScriptのsetInterval()を使い、一定間隔で処理を繰り返す。」では、一定間隔で変数に+1しながら100までカウントしました。
今日は、同じように一定間隔で座標に+1しながら画像を移動させてみようと思います。
まずはサンプル
ここはデバッグ用です。 変数xの値を表示します。
x座標が、ある値を超えたらゼロに戻すと、ぐるぐるループさせることができますが、今回はシンプルにするために行っておりません。
HTML
まずはHTMLです。
最初の段落(p)は、変数xの確認用です。実際に公開する場合は削除します。2つ目の段落(p)が画像です。 img要素には、idで名前を付けています。3つめの段落(p)は、ボタンです。onclickイベントで関数を呼び出しています。
<p id="debug"> ここはデバッグ用です。 変数xの値を表示します。 </p> <p> <img src="WEB-LABO.png" id="pic"> </p> <p> <input type="button" value="スタート" onclick="moveImg()"> <input type="button" value="ストップ" onclick="stopImg()"> </p>
※画像のファイル名は、用意されたものに変更ください。
CSS
CSSでは、img要素に「position: relative;」を設定します。動的に座標を移動させるには、「position: absolute;」か「position: relative;」を指定します。
<style type="text/css"> #pic{ position: relative; } </style>
JavaScript
moveImg()関数が「スタート」ボタンを押された時に実行する関数です。stopImg()関数は、「ストップ」ボタンを押された時に実行する関数です。
今回は、フラグ変数(flg)を使ってmoveImg()関数が重複して起動しないようにしています。
<script type="text/javascript">; var time; //タイマーID用 var flg=0; //二重起動防止フラグ var x=0; //x座標 function moveImg() { if(flg==1){ //flgが1ならば、処理を中断 return; }else{ //flgがゼロならば、flgに1を代入して処理を継続 flg=1; } time = setInterval(function(){ //x座標に+1 x+=1; //変数xの値をCSSに適用 document.getElementById("pic").style.left = x + "px"; //変数xの値を確認 document.getElementById("debug").innerHTML=x; },100); } function stopImg() { //タイマー処理を解除し、flgにゼロを代入 clearInterval(time); flg=0; } </script>
HTMLにまとめると
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>setInterval()でアニメーション</title> <style type="text/css"> #pic{ position: relative; } </style> <script type="text/javascript"> var time; //タイマーID用 var flg=0; //二重起動防止フラグ var x=0; //x座標 function moveImg() { if(flg==1){ //flgが1ならば、処理を中断 return; }else{ //flgがゼロならば、flgに1を代入して処理を継続 flg=1; } time = setInterval(function(){ //x座標に+1 x+=1; //変数xの値をCSSに適用 document.getElementById("pic").style.left = x + "px"; //変数xの値を確認 document.getElementById("debug").innerHTML=x; },100); } function stopImg() { //タイマー処理を解除し、flgにゼロを代入 clearInterval(time); flg=0; } </script> </head> <body> <p id="debug"> ここはデバッグ用です。 変数xの値を表示します。 </p> <p> <img src="WEB-LABO.png" id="pic"> </p> <p> <input type="button" value="スタート" onclick="moveImg()"> <input type="button" value="ストップ" onclick="stopImg()"> </p> </body> </html>
まとめ
タイマーで変化させる変数の値を座標に使用すれば、位置を移動させることができます。
タイマーで変化させる変数の値で画像を切り替えれば、スライドショーを作ることができます。
【送料無料】ノンプログラマのためのJavaScriptはじめの一歩 [ 外村和仁 ] |