スタートページJavascriptCANVASアニメーション

アニメーション(3)
疑似sleep機能(async, await, Promise)


JavaScript には sleep関数 がありません。同様な機能を実現するために、async, await, Promise があります。

数式の指定
y=f(x)=
独立変数xの計算範囲とグラフの表示範囲
xmin= xmax= ymin= ymax=
遅延時間=(ms)
(遅延速度に注意)

遅延がない場合のソースコード

  // フォーム入力の取得
  :
  // XY座標軸の設定
  :
  // 初期値設定
  dx = (xmax-xmin)/100;
  x = xmin;
  x0 = x;
  y0 = eval(f);
  // グラフ
  while(x <= xmax) {
    x = x + dx;
    y = eval(f);
    drawLine(x0,y0, x,y, "white", 4);
    x0 = x;
    y0 = y;
  }

graph1 のソースコード

  :
  // グラフ
  async function 遅延() { // ア
    while(x <= xmax) {
      await new Promise(s => setTimeout(s, interval)) // イ
      x = x + dx;
      y = eval(f);
      drawLine(x0,y0, x,y, "white", 4);
      x0 = x;
      y0 = y;
    }
  }
  遅延(); // ウ

graph2 のソースコード

    :
  // グラフ
  function sleep(ms) {
    return new Promise(s => setTimeout(s, ms)); // エ
  }
  async function 遅延() {
    while(x <= xmax) {
      if ( (x>0) && (x<2) ) await sleep(100); // オ
      else await sleep(20);
      x = x + dx;
      y = eval(f);
      drawLine(x0,y0, x,y, "white", 4);
      x0 = x;
      y0 = y;
    }
  }
  遅延();