処理を遅延して実行する (一定時間経過後に処理を実行する)

JavaScriptで一定時間が経過してから処理を実行したいことがあります。この記事では遅延して処理を実行するコードを紹介します。

概要

JavaScriptで一致時間経過後に処理を実行するにはsetTimeout()メソッドを用います。

時間経過後にJavaScriptの関数を呼び出す場合

コード

下記のコードを記述します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
  <script type="text/javascript">
    function func() {
      target = document.getElementById("output");
      target.style.backgroundColor = "#ffe35f";
      target.innerText = "ボタンがクリックされました。";
    }

    function delayExec() {
      setTimeout('func();', 1500);
    }
  </script>
</head>
<body>
  <input type="button" value="Click" onclick="delayExec();" />
  <div id="output"></div>
</body>
</html>

解説

setTimeoutメソッドの第一引数に実行するコードを文字列で与えます。第二引数は実行開始までの時間を与えます。時間はミリ秒単位になります。上記の例では第一引数に"func();"を第二引数に1500を与えているため、1500ミリ秒(1.5秒)が経過後func()関数を実行します。

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Click]ボタンをクリックします。ボタンをクリック後、1.5秒ほどすると下図の状態に変わります。遅延して処理が実行されていることが確認できます。

時間経過後に関数リテラル(匿名関数)で記述した処理を呼び出す場合

コード

下記のコードを記述します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>

  <script type="text/javascript">
  function delayExec() {
    setTimeout(function () {
      target = document.getElementById("output");
      target.style.backgroundColor = "#e2abff";
      target.innerText = "ボタンがクリックされました。";
    }, 1500);
  }
  </script>

</head>
<body>
  <input type="button" value="Click" onclick="delayExec();" />
  <div id="output"></div>
</body>
</html>

解説

setTimeoutメソッドの第一引数に実行する関数リテラルを与えます。第二引数は実行開始までの時間を与えます。時間はミリ秒単位になります。上記の例では1500ミリ秒(1.5秒)が経過後、第一引数に記述した関数リテラルを実行します。

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Click]ボタンをクリックします。ボタンをクリック後、1.5秒ほどすると下図の状態に変わります。遅延して処理が実行されていることが確認できます。

時間経過後にJavaScriptの関数を引数を与えて呼び出す場合

コード

下記のコードを記述します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>
  <script type="text/javascript">
    function func(text) {
      target = document.getElementById("output");
      target.style.backgroundColor = "#daf763";
      target.innerText = text + "です。";
    }

    function delayExec(text) {
      funcstr = "func('"+text+"');";
      setTimeout(funcstr, 1500);
    }
  </script>
</head>
<body>
  <input type="button" value="Click" onclick="delayExec('ペンギン');" />
  <div id="output"></div>
</body>
</html>

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Click]ボタンをクリックします。ボタンをクリック後、1.5秒ほどすると下図の状態に変わります。遅延して処理が実行されていることが確認できます。また、関数に値が渡されていることも確認できます。

時間経過後に関数リテラル(匿名関数)で記述した処理を引数を与えて呼び出す場合

コード

下記のコードを記述します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title></title>

  <script type="text/javascript">
  function delayExec(text) {
    setTimeout(function (textstr) {
      target = document.getElementById("output");
      target.style.backgroundColor = "#b7ffe8";
      target.innerText = textstr+"です。";
    }, 1500, text);
  }
  </script> 

</head>
<body>
  <input type="button" value="Click" onclick="delayExec('あひる');" />
  <div id="output"></div>
</body>
</html>

解説

setTimeoutメソッドの第一引数に実行する関数リテラルを与えます。第二引数は実行開始までの時間を与えます、第三引数に関数リテラルに与える引数を与えます。上記の例では1500ミリ秒(1.5秒)が経過後、第一引数に記述した関数リテラルを実行します。関数リテラルのtextstr変数には、setTimeoutの第三引数textの内容が渡されます。

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


[Click]ボタンをクリックします。ボタンをクリック後、1.5秒ほどすると下図の状態に変わります。遅延して処理が実行されていることが確認できます。また、関数リテラル(匿名関数)に値が渡されていることも確認できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-06-09
iPentec all rights reserverd.