概要: JavaScriptを使えば、Webブラウザ上に自由に図形を描画し、それを動かすことができます。本記事では、基本的な描画方法からライブラリの活用、アニメーションやインタラクティブな操作まで、JavaScriptによる図形描画の魅力を解説します。
JavaScriptで図形を描画する基本
ウェブブラウザ上で動的かつ魅力的な図形を描画することは、JavaScriptの進化とともにますます容易になっています。
ここでは、その中心となる主要な描画技術であるCanvas、SVG、WebGLの基本と、それぞれの特徴について掘り下げていきます。
Canvas:ピクセルベースの柔軟な描画
HTML5で導入されたcanvas要素は、JavaScriptを使って2Dまたは3Dのグラフィックを描画するための強力なツールです。
この技術はピクセルベースの描画を行うため、線、図形、画像、テキストなど、あらゆる要素を自由自在に操作し、複雑な表現を可能にします。
特に、データに基づいた動的なグラフ描画においてその真価を発揮し、棒グラフや円グラフなどをJavaScriptで直接生成できるため、静的な画像ファイルに頼る必要がなくなります。
Canvas APIの最新動向としては、HTML/CSSを直接Canvas上に描画できる新しいAPIが提案されている点が注目されます。
これは、drawElement()やWebGLでHTML/CSSを描画するtexElement2D()といった機能を含み、より柔軟なレイアウトと高度なテキスト処理がCanvas上で実現される未来を示唆しています。
これにより、ウェブサイトのUI要素と描画要素の統合がさらに進むことが期待されています。
注意点として、Canvasはピクセルベースであるため、描画された内容を拡大すると「ジャギー」と呼ばれるギザギザが発生する可能性があります。
しかし、JavaScriptによる高度な制御と組み合わせることで、画像や動画要素では難しい、状況に応じた多様な表現が可能になり、ゲーム開発からデータ可視化、インタラクティブアートまで幅広い分野で活用されています。
出典: 参考情報
SVG:拡大しても劣化しないベクター描画
SVG(Scalable Vector Graphics)は、XMLベースの2次元ベクターイメージフォーマットであり、その最大の特徴は、拡大・縮小しても画質が全く劣化しない点にあります。
これは、画像がピクセル情報ではなく、点と線を数学的に記述したベクターデータとして表現されるためです。
ウェブサイトのデザインやアイコン、ロゴ、インタラクティブなグラフなど、クリアな表示が求められる場面で非常に有効です。
SVG 2.0の仕様策定にはGoogleやAdobeといった大手テクノロジー企業が積極的に関与しており、その動向は日々進化しています。
2018年5月時点のHTML標準仕様ではSVG 2が参照されており、現代のウェブ開発において実装が推奨される技術です。
FigmaやAdobe Illustratorのような主要なデザインツールがSVGの編集・活用をサポートしているため、デザイナーが作成したベクターデータを開発者がスムーズにウェブに組み込むことができ、デザインと開発の連携が強化されています。
SVGはテキスト情報もベクターデータとして扱うため、拡大しても文字がにじむことなく、常にシャープな表示を保ちます。
また、アクセシビリティにも優れており、スクリーンリーダーでSVG内の情報を読み上げることが容易であるため、視覚障がいのあるユーザーにも情報を提供しやすいという企業にとっての大きなメリットがあります。
一方で、ラスターデータ(JPEG, PNGなど)と比較して扱えるソフトウェアが限られる場合や、SNSへの直接投稿ができないケースがあるため、必要に応じてラスター形式への変換も考慮する必要があります。
出典: 参考情報
WebGL:ブラウザで実現する高性能3Dグラフィックス
WebGL(Web Graphics Library)は、Webブラウザ上でプラグインを一切必要とせず、インタラクティブな2Dおよび3DコンピュータグラフィックスをレンダリングするためのJavaScript APIです。
GPU(Graphics Processing Unit)を直接活用することで、非常に高速なグラフィックス処理を実現し、ウェブサイト上でリッチな3D表現、高度なゲームコンテンツ、複雑なデータ可視化などを実現することを可能にします。
WebGLは、2017年にOpenGL ES 3.0相当の機能を追加したWebGL 2.0が登場し、より高品質なグラフィックスとパフォーマンスの向上が実現しています。
主要なブラウザ(Chrome, Firefox, Safari, Edge)はデスクトップだけでなく、スマートフォンやタブレットといったモバイルデバイスでもWebGLに対応しているため、幅広いユーザーにリッチな3D体験を提供できます。
これにより、ウェブの表現力が飛躍的に向上し、ユーザーエンゲージメントの高いコンテンツ制作が可能になっています。
WebGL自体は低レベルなAPIであるため、直接扱うには高度なプログラミング知識を要する場合があります。
しかし、Three.jsやBabylon.jsといった強力なJavaScriptライブラリを活用することで、開発効率を劇的に向上させることができます。
これらのライブラリは、3Dモデルの読み込み、シーン管理、カメラ制御、ライティングなどの複雑な機能を抽象化し、初心者でも比較的容易に高度な3Dグラフィックスを開発できるように設計されています。
WebGLはブラウザのサンドボックス内で動作するため、セキュリティ面でも安全に利用できるという利点があります。
出典: 参考情報
図形描画をさらに便利にするライブラリ活用術
JavaScriptによる図形描画は、生のAPIを直接操作するだけでなく、豊富なライブラリを活用することで、より効率的かつ高度な表現を実現できます。
ここでは、特に利用頻度の高いデータ可視化、3Dグラフィックス、アニメーションの分野に焦点を当て、便利なライブラリとその活用法を紹介します。
データ可視化ライブラリで魅せるグラフ
膨大なデータを視覚的に理解しやすくするためには、魅力的なグラフの描画が不可欠です。
JavaScriptには、このデータ可視化を強力にサポートするライブラリが多数存在します。
その中でも、Chart.jsは、シンプルながらも美しい棒グラフ、円グラフ、折れ線グラフなどを簡単に実装できる人気のライブラリです。
レスポンシブデザインにも対応しており、さまざまなデバイスサイズで最適に表示されます。
データの更新やユーザーインタラクションに応じてグラフを動的に変化させることも容易で、ビジネスレポートやダッシュボードなどで広く活用されています。
さらに高度なデータ可視化には、D3.js (Data-Driven Documents)が強力な選択肢となります。
D3.jsは、データとドキュメントをバインドするための低レベルながら非常に柔軟なAPIを提供し、SVG、Canvas、HTMLを組み合わせて、複雑でインタラクティブなデータ視覚化を可能にします。
統計データの分析結果を動的なネットワークグラフとして表示したり、地理情報と組み合わせてインタラクティブな地図を作成したりするなど、その応用範囲は無限大です。
D3.jsは学習コストがやや高いものの、その表現力と柔軟性から、データサイエンスやジャーナリズムの分野でプロフェッショナルなビジュアライゼーションを実現するために広く利用されています。
出典: 参考情報
3Dグラフィックスを簡単に!WebGLラッパーライブラリ
前述の通り、WebGLは強力な3Dグラフィックス能力を提供しますが、その低レベルなAPIは開発に専門知識を要します。
そこで、WebGLの複雑さを抽象化し、開発者がより直感的に3Dコンテンツを作成できるよう支援するライブラリが多数登場しています。
最も広く知られているのが、Three.jsです。
Three.jsは、シーン管理、カメラ制御、ライティング、マテリアル、ジオメトリなど、3Dグラフィックス開発に必要なあらゆる機能を提供します。
これにより、開発者は複雑なWebGLシェーダープログラミングを意識することなく、数行のJavaScriptコードでリアルタイムの3Dシーンを構築できます。
3Dモデルの読み込み(GLTF, OBJなど)、物理ベースレンダリング(PBR)、ポストエフェクトなど、豊富な機能と活発なコミュニティが魅力です。
Microsoftが提供するBabylon.jsもまた、高機能なWebGLライブラリとして人気を集めています。
ゲーム開発に特に強みを持つBabylon.jsは、物理エンジンとの統合、アニメーションシステム、パーティクルシステム、WebXRサポートなど、充実した機能セットを提供します。
高品質な3Dシーンの作成から、VR/ARコンテンツの開発まで、幅広い用途に対応可能です。
これらのライブラリを活用することで、WebGLの持つポテンシャルを最大限に引き出し、ウェブサイト上に没入感のある3D体験を容易に実装することができます。
出典: 参考情報
アニメーションライブラリで動きを加える
図形やUI要素に動きを加えるアニメーションは、ユーザー体験を向上させる上で非常に重要です。
JavaScriptのアニメーションライブラリは、複雑なタイムライン制御やスムーズなイージング関数を簡単に実装できるように設計されています。
Anime.jsは、その強力な機能と使いやすさで知られる軽量なJavaScriptアニメーションライブラリです。
HTML要素、SVG、DOM属性、JavaScriptオブジェクトなど、あらゆるプロパティをアニメーションさせることができます。
タイムライン機能を使えば、複数のアニメーションを順序立てて実行したり、同時に開始したり、複雑なシーケンスを直感的に構築することが可能です。
CSSプロパティやSVGパス、任意の数値プロパティを滑らかに補間することで、ウェブサイトに生命を吹き込みます。
例えば、ボタンがクリックされたときに図形が拡大・縮小したり、テキストがフェードイン・フェードアウトしたりといったマイクロインタラクションから、ページ全体のトランジションまで、多様なアニメーションを少ないコード量で実現できます。
アニメーションライブラリは、CSSアニメーションでは対応しきれない複雑な制御や、JavaScriptオブジェクトのプロパティを動的に変化させる場合に特に有効です。
これらのツールを使いこなすことで、ユーザーの注意を引き、情報を効果的に伝え、ウェブサイト全体の魅力を飛躍的に高めることができます。
出典: 参考情報
JavaScriptで図形を動かす!アニメーションとドラッグ&ドロップ
JavaScriptを使えば、静的な図形を描画するだけでなく、それらに命を吹き込み、ユーザーの操作に応じて動かすことが可能です。
ここでは、滑らかなアニメーションの実現方法と、ユーザーが直感的に操作できるドラッグ&ドロップ機能の実装について解説します。
JavaScriptで実現する滑らかなアニメーション
ウェブ上で滑らかなアニメーションを実現するための最も基本的なメカニズムは、ブラウザの描画サイクルに合わせた更新です。
これには、requestAnimationFrameメソッドが中心的な役割を果たします。
このメソッドは、ブラウザが次のフレームを描画する直前に指定したコールバック関数を実行するため、描画処理と同期し、非常に効率的でスムーズなアニメーションを提供します。
例えば、Canvas上に描画された円を右へ移動させる場合、requestAnimationFrameループ内で円のX座標を少しずつ増加させ、その都度キャンバスをクリアして再描画することで、滑らかな動きが生まれます。
CSSアニメーションも手軽ですが、JavaScriptによるアニメーションは、より複雑なロジックや、データに基づいた動的な動き、複数の要素間の連携などを実現する際に真価を発揮します。
アニメーションライブラリであるAnime.jsなどは、このrequestAnimationFrameを内部で利用し、さらにイージング関数やタイムライン制御を簡単に扱えるように抽象化してくれています。
アニメーションのパフォーマンスを最適化するためには、不要な再描画を避ける、DOM操作を最小限に抑える、GPUを活用できるCSSプロパティ(transform, opacityなど)を優先的に使用するといった工夫も重要です。
JavaScriptによる細やかな制御を学ぶことで、ウェブコンテンツに深みとインタラクションを追加し、ユーザーの目を引きつける魅力的な体験を提供できるようになります。
ユーザー操作で動かす!ドラッグ&ドロップの実装
ユーザーが画面上の要素を直接掴んで移動させる「ドラッグ&ドロップ」は、直感的で高い操作性を提供します。
JavaScriptでこの機能を実現するには、主にマウスイベント(またはタッチイベント)を組み合わせて利用します。
基本的なロジックは、以下の3つのイベントで構成されます。
まず、要素をドラッグ開始する際に発生するmousedownイベントで、ドラッグ対象の要素とマウスの初期位置を記憶します。
次に、マウスが移動する際に発生するmousemoveイベントで、現在のマウス位置と初期位置の差分を計算し、その差分だけ要素の位置を更新します。
最後に、マウスボタンが離された際に発生するmouseupイベントで、ドラッグ状態を終了させます。
CanvasやSVGの図形をドラッグ&ドロップする場合、少し工夫が必要です。
Canvasでは、マウスイベントの座標がどの図形の上にあるかを判定する「ヒットテスト」の実装が必要になります。
SVGでは、各図形が独立したDOM要素であるため、それぞれのSVG要素に直接イベントリスナーを付与することで、比較的容易にドラッグ&ドロップを実現できます。
例えば、SVGの<circle>要素に対してmousemoveイベントでcxとcy属性を動的に変更することで、円をドラッグ移動させることが可能です。
ドラッグ&ドロップ機能は、タスク管理ボード、画像編集ツール、ゲームのパズル要素など、多様なアプリケーションでユーザーエクスペリエンスを向上させるために活用されています。
インタラクションを豊かにするイージングと物理演算
ただ要素を動かすだけでなく、その動きに「感情」や「重み」を与えることで、ユーザーとのインタラクションは格段に豊かになります。
その鍵を握るのが、イージングと簡単な物理演算です。
イージング(Easing)とは、アニメーションの速度変化を制御する関数群のことです。
一定速度で動く「リニア」な動きではなく、加速したり減速したり、バウンドしたりといった、より自然で魅力的な動きを表現できます。
例えば、「Ease Out Quad」はゆっくり始まり、素早く加速して、最後にまたゆっくりと終わるような効果を生み出します。
多くのCSSアニメーションやJavaScriptアニメーションライブラリ(Anime.jsなど)には、豊富なイージング関数が組み込まれており、これらを適用するだけで簡単にプロフェッショナルな動きを実現できます。
さらに高度なインタラクションを目指すなら、簡単な物理演算をアニメーションに取り入れることも有効です。
例えば、重力の影響を受けて落下するオブジェクト、壁に衝突して跳ね返るボール、バネのように伸縮するUI要素などをJavaScriptでシミュレートできます。
これは、フレームごとに速度や位置を計算し、摩擦や反発係数といった物理的なパラメータを適用することで実現します。
本格的な物理エンジンを導入しなくても、数式を組み合わせて簡易的な物理挙動を再現することで、ユーザー操作に対するフィードバックをよりリアルで没入感のあるものにできます。
これにより、単なる視覚的な変化を超え、ユーザーが「触れている」感覚を強化し、より魅力的なウェブ体験を提供することが可能になります。
全画面表示と表示制御:JavaScriptでの画面表現
ウェブアプリケーションにおいて、ユーザーに没入感の高い体験を提供したり、情報へのアクセスを最適化したりするためには、画面表示の制御が不可欠です。
JavaScriptを使えば、ブラウザの全画面表示機能の利用から、画面サイズに応じたレスポンシブな表示、そして要素の表示/非表示や重ね順の管理まで、多岐にわたる画面表現をコントロールできます。
ブラウザの全画面表示APIを活用する
ゲーム、プレゼンテーション、動画再生、または画像ギャラリーなど、コンテンツに集中してもらいたい場合に有効なのが、ブラウザの全画面表示機能です。
JavaScriptのFullscreen APIを使えば、ユーザーの操作に応じて特定の要素やドキュメント全体を全画面モードで表示させることができます。
主要なメソッドはElement.requestFullscreen()で、これは指定した要素を全画面表示にするためのプロミスを返します。
ユーザーが全画面表示を終了したい場合は、document.exitFullscreen()を呼び出します。
ただし、セキュリティ上の理由から、requestFullscreen()はユーザーの直接的な操作(クリックなど)によってのみ呼び出すことができ、自動的に全画面表示にすることはできません。
全画面表示モードでは、通常ブラウザのUI(アドレスバー、タブなど)が隠れるため、ユーザーはコンテンツに完全に没頭できます。
全画面表示中にコンテンツの比率を維持したり、イベントを監視して表示状態に応じてUIを調整したりすることも重要です。
例えば、Canvasを使ったゲームを全画面表示にする場合、画面サイズに合わせてCanvasの描画領域を動的に調整することで、常に最適なゲーム体験を提供できます。
画面サイズの変更に対応するレスポンシブデザイン
現代のウェブアプリケーションは、スマートフォンからデスクトップまで、様々な画面サイズのデバイスで利用されます。
JavaScriptは、これらのデバイスに最適化されたレスポンシブな表示を実現するためにも活用されます。
ブラウザのウィンドウサイズが変更されたことを検知するには、window.resizeイベントを利用します。
このイベントリスナー内で、現在のウィンドウサイズを取得し、それに基づいてCanvasの描画サイズを変更したり、SVG要素のスケールを調整したり、あるいはDOM要素の配置やスタイルを動的に変更するといった処理を実行できます。
ただし、resizeイベントは頻繁に発生するため、パフォーマンスを考慮して、ThrottlingやDebouncingといった手法を用いて処理の実行頻度を制限することが推奨されます。
さらに高度なレスポンシブ制御には、MediaQueryListインターフェースも有効です。
これはCSSのメディアクエリにJavaScriptからアクセスできる機能で、特定のメディアクエリが一致しているかどうかをリアルタイムで監視できます。
例えば、「画面幅が768px未満の場合に特定のスクリプトを実行する」といった条件ベースの処理を記述することで、CSSだけでは実現が難しい、JavaScriptを伴う複雑なレスポンシブ動作を実現することが可能です。
これにより、デバイスの特性に合わせた最適なユーザーインターフェースとエクスペリエンスを提供できます。
表示状態を制御する:要素の表示/非表示と重ね順
インタラクティブなウェブアプリケーションでは、ユーザーの操作やアプリケーションの状態に応じて、画面上の要素を動的に表示したり非表示にしたり、あるいは重ね順を変更したりすることが頻繁に求められます。
JavaScriptは、これらの表示制御を柔軟に行うための手段を提供します。
要素の表示/非表示を切り替える最も一般的な方法は、CSSのdisplayプロパティを操作することです。
例えば、element.style.display = 'none';とすることで要素を完全にDOMツリーから削除したかのように非表示にし、element.style.display = 'block';(または他の適切な値)で再表示できます。
他にvisibility: hidden;は要素のスペースは維持したまま非表示にし、opacity: 0;は要素を透明にするだけでスペースは維持するという違いがあります。
用途に応じて適切な方法を選択することが重要です。
複数の要素が重なり合う場合の表示順序を制御するには、CSSのz-indexプロパティをJavaScriptから操作します。
z-indexは、positionプロパティがrelative, absolute, fixed, stickyのいずれかに設定されている要素に適用され、値が大きいほど手前に表示されます。
例えば、モーダルダイアログを画面の最前面に表示させる際に、そのダイアログ要素のz-indexを非常に大きな値に設定し、背景を覆い隠すオーバーレイのz-indexはその次にする、といった使い方ができます。
これらの表示制御を適切に行うことで、ユーザーが混乱することなく情報を理解し、アプリケーションを快適に操作できる、洗練されたユーザーインターフェースを構築することが可能になります。
JavaScriptでインタラクティブな体験を!ダイアログとビープ音
ウェブアプリケーションにおける「インタラクティブな体験」は、視覚的な要素だけにとどまりません。
ユーザーに直接メッセージを伝えたり、操作に対するフィードバックを音で提供したりすることも、ユーザーエンゲージメントを高める上で非常に重要です。
JavaScriptを使えば、これらの対話的な要素も簡単に実装できます。
ユーザーとの対話:JavaScriptの標準ダイアログ
ユーザーに情報を伝えたり、確認を促したり、入力を求めたりする最も基本的な方法が、JavaScriptの標準ダイアログ機能です。
これらは手軽に利用できる反面、デザインのカスタマイズが難しいという特徴があります。
最もシンプルなのが、alert()関数です。
これは、ユーザーにメッセージを表示し、OKボタンをクリックするまで処理を停止します。
情報の通知や、エラーメッセージの表示などに使われますが、頻繁な使用はユーザーエクスペリエンスを損ねる可能性があるため注意が必要です。
次に、ユーザーの確認を求めるconfirm()関数があります。
これはメッセージとともに「OK」と「キャンセル」のボタンを表示し、ユーザーの選択に応じてtrueまたはfalseを返します。
例えば、「本当に削除しますか?」といった重要な操作の前に確認を促す際に利用されます。
そして、ユーザーからの入力を受け付けるprompt()関数です。
これはメッセージと入力フィールド、そして「OK」と「キャンセル」のボタンを表示し、ユーザーが入力した文字列を返します(キャンセルされた場合はnull)。
ユーザー名や簡単な設定値の入力などに使われます。
これらの標準ダイアログは手軽ですが、デザインがブラウザに依存し、HTML/CSSで自由に装飾できないため、よりリッチなUIが必要な場合はカスタムのモーダルウィンドウを実装するのが一般的です。
オリジナルのモーダルダイアログでリッチなUIを
JavaScriptの標準ダイアログでは表現力に限界があるため、現代のウェブアプリケーションではオリジナルのモーダルダイアログをHTML、CSS、JavaScriptを組み合わせて実装することが主流です。
これにより、アプリケーションのデザインと統一感のある、リッチでユーザーフレンドリーなインタラクションを提供できます。
カスタムモーダルは、通常、画面全体を覆う半透明のオーバーレイと、その上に表示されるダイアログボックスで構成されます。
JavaScriptでは、ボタンクリックなどのイベントをトリガーとして、CSSのdisplayプロパティやopacityプロパティを操作して、これらの要素を表示・非表示にします。
例えば、ユーザーがフォーム送信ボタンをクリックした際に、送信確認のモーダルを表示し、その中で詳細情報の表示や最終確認の選択肢を提供するなど、より複雑な情報のやり取りを実現できます。
実装のポイントとしては、アクセシビリティを考慮することが重要です。
モーダルが表示された際には、背景のコンテンツが操作できないようにし、キーボード(特にTabキー)でのナビゲーションがモーダル内に閉じ込められるようにフォーカス管理を行う必要があります。
また、ESCキーでモーダルを閉じられるようにするなど、直感的な操作性を提供することで、ユーザーはより快適にアプリケーションを利用できるようになります。
オリジナルのモーダルダイアログは、単なる情報の表示だけでなく、ユーザーの操作フローを効果的にガイドし、洗練されたユーザー体験を創出するための強力なツールとなります。
音でフィードバック:Web Audio APIとビープ音
視覚情報だけでなく、聴覚情報を組み合わせることで、ユーザーへのフィードバックをより強力にし、アプリケーションのインタラクティブ性を高めることができます。
JavaScriptのWeb Audio APIは、ウェブブラウザで高度な音声処理を行うための強力なインターフェースです。
Web Audio APIを使用すると、単に既存の音声ファイルを再生するだけでなく、リアルタイムで音を生成・加工することが可能です。
例えば、非常にシンプルなビープ音であれば、AudioContextを作成し、OscillatorNode(発振器)を使って特定の周波数の波形を生成し、それをGainNode(音量調整)を介してスピーカーに出力することで実現できます。
成功した操作には短いクリアな音、エラーが発生した際には少し警告的な音、新しい通知があった際には穏やかなチャイム音など、イベントの性質に応じて異なる種類の音をデザインできます。
以下は、簡単なビープ音を再生する基本的なWeb Audio APIのコード例です。
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
function playBeep() {
const oscillator = audioContext.createOscillator();
const gainNode = audioContext.createGain();
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
oscillator.type = 'sine'; // 正弦波
oscillator.frequency.setValueAtTime(440, audioContext.currentTime); // 440Hz
gainNode.gain.setValueAtTime(0.5, audioContext.currentTime); // 音量0.5
oscillator.start();
gainNode.gain.exponentialRampToValueAtTime(0.00001, audioContext.currentTime + 0.5); // 0.5秒かけて減衰
oscillator.stop(audioContext.currentTime + 0.5); // 0.5秒後に停止
}
// 例えば、ボタンクリック時にplayBeep()を呼び出す
// document.getElementById('myButton').addEventListener('click', playBeep);
音によるフィードバックは、ユーザーが画面から目を離している時や、特定の操作が完了したことを即座に伝えたい場合に特に有効です。
Web Audio APIを使いこなすことで、ウェブアプリケーションの体験をより豊かで多感覚なものに向上させることができます。
まとめ
よくある質問
Q: JavaScriptで図形を描画する最も基本的な方法は?
A: HTML5のCanvas APIを使用するのが一般的です。JavaScriptでCanvas要素を取得し、そのコンテキストオブジェクトを通じて線や図形を描画します。
Q: 図形描画を効率化できるJavaScriptライブラリにはどんなものがありますか?
A: Paper.js, Fabric.js, Konva.jsなどが有名です。これらのライブラリは、複雑な描画処理やオブジェクト管理を簡潔に記述できるようにサポートします。
Q: JavaScriptで図形を動かすにはどうすればよいですか?
A: requestAnimationFrame関数を使ったアニメーションループ、CSSトランジションやJavaScriptのタイマー関数(setTimeout, setInterval)などを利用して、図形の座標やスタイルを変化させることで実現できます。
Q: JavaScriptで全画面表示を実現する方法は?
A: Full Screen APIを使用することで、要素を全画面表示できます。また、CSSの`position: fixed`や`width: 100vw`, `height: 100vh`を組み合わせる方法もあります。
Q: JavaScriptでダイアログを表示し、ユーザーの選択肢を受け取るには?
A: `window.confirm()`関数を使うと、OKとキャンセルボタンを持つダイアログが表示され、ユーザーの選択(true/false)を取得できます。より複雑なダイアログは、HTMLとJavaScriptで独自に実装することも可能です。