SSブログ

JavaScript でリサジュー [プログラム三昧]このエントリーを含むはてなブックマーク#

お久しぶりでございます。 休載していた間に JavaScript がずいぶん変わってしまったみたいで。 ためしに JavaScript でリサージュ(リサジュー)を描いてみよう。


onclik が無くなって、 var が無くなって、かなり変わりましたね。

ソースコードは、以下の通りです。

<div id="div20240217">
<canvas width="400" height="400" style="border:dashed; margin:10px;"></canvas>
<br/>
<input id="draw" type="button" value="PUSH ME"/>
</div>
<script type="text/javascript">
{
  const button = document.querySelector("div#div20240217 input#draw");
  button.draw = function () {
    const canvas = document.querySelector("div#div20240217 canvas");
    const context = canvas.getContext("2d");
    const fx = 5;
    const fy = 7;
    const cx = canvas.width * 0.5;
    const cy = canvas.height * 0.5;
    const dx = canvas.width * 0.45;
    const dy = canvas.height * 0.45;
    const N = 100;
    context.clearRect(0, 0, canvas.width, canvas.height);
    context.beginPath()
    for (let i = 0; i < N; i++) {
      const x = cx + dx * Math.cos(2 * Math.PI * (i * fx / N));
      const y = cy + dy * Math.sin(2 * Math.PI * (i * fy / N));
      if (i ==0) {
        context.moveTo(x, y);
      } else {
        context.lineTo(x, y);
      }
    }
    context.closePath();
    context.stroke();
  }
  button.addEventListener("click", button.draw);
}
</script>

div でカプセル化

ブログ記事で使うことになると、他の記事との緩衝が問題になります。 そこで、この記事専用の div 要素 "div20240217" にすべてを入れる構造にしました。 他の記事を書く際には、 div の id さえ変更すれば干渉を防ぐことができるでしょう。

イベントリスナも内包

ボタンをクリックしたときに呼び出されるイベントリスナはボタンオブジェクトの属性 button.draw としました。 まあ、無名関数を使えばよかったんですけどね。


nice!(0)  コメント(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。