setInterval / clearInterval

setInterval
インターバルタイマーを設定する。一定間隔で実行する処理を文字列で指定する。あと実行間隔(単位はミリ秒)も指定する。戻り値としてタイマー変数っていうのが返ってくる。
clearInterval
インターバルタイマーを解除する。引数にタイマー変数を指定する。
  • タイマーを再設定するときは一度解除してから設定しないといけない。

これと似ているのにsetTimeout / clearTimeoutというのがあるけど、こっちはインターバルタイマーじゃなくて単なるタイマーで、処理を一度だけ実行する時に使う。
写真のスライドショーみたいなのを作ってみました。

<html>
<head>
<title>setInterval</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script language="javascript">
<!--
var myImages = new Array(
    "/images/blank.gif",
    "/images/closelabel.gif",
    "/images/indicator.gif",
    "/images/next.gif",
    "/images/prev.gif",
    "/images/rss.gif",
    "/images/close.gif",
    "/images/image-1.jpg",
    "/images/loading.gif",
    "/images/nextlabel.gif",
    "/images/prevlabel.gif",
    "/images/thumb-1.jpg"
);
var index = 0;
var intervalTime = 1000;
var timer;
var isSliding;

function nextImage(image, caption) {
    if ( index >= myImages.length ) {
        index = 0;
    }
    document.getElementById(caption).innerHTML = myImages[index];
    document.getElementById(image).src = myImages[index++];
}

function startSlideShow() {
    timer = setInterval( "nextImage('imageBox', 'imageBoxCaption')", intervalTime );
    isSliding = 1;
    document.getElementById('slideState').innerHTML = "stop";
}

function stopSlideShow() {
    clearInterval(timer);
    isSliding = 0;
    document.getElementById('slideState').innerHTML = "start";
}

function setIntervalTime(time) {
    intervalTime = time;
}

function toggleSlideShow() {
    if ( isSliding ) {
        stopSlideShow();
    } else {
        startSlideShow();
    }
}

function restartSlideShow() {
    stopSlideShow();
    startSlideShow();
}

function changeSlideShowInterval(time) {
    setIntervalTime(time);
    restartSlideShow();
}

function onInit() {
    setIntervalTime(1000);
    startSlideShow();
}
// -->
</script>
</head>
<body onload="onInit()">

<form name="setIntervalForm" onsubmit="
changeSlideShowInterval(this.time.value);return false;
">
スライドショーの間隔を<input type="text" name="time" value="" size="20">ミリ秒に
<input type="submit" name="submit" value="変更する">
</form>

[<a href="javascript:toggleSlideShow()" id="slideState"></a>]
<p>
<img src="" id="imageBox" border="0" />
<div id="imageBoxCaption"></div>
</script>
</body>
</html>

http://takatoshi.dyndns.org/~takatoshi/learning/js/setinterval.html
昨日はJavaScriptが嫌いになりかけたけど今日は楽しかった。
関数をいくつか作っただけだけど、画像のパスリストとかスライドショーの間隔とかタイマー変数とか実行状態とか、いろいろと属性があるなーってことにも気づけたので、あと1歩踏み込めばこれをクラスにするのも簡単にできそうだし。