初めてのスクリプトをブラウザに送信する
クライアントサイドのインタラクションを必要とするような、モバイルの画面サイズでリンクを開閉するハンバーガーメニューを追加しましょう!
ここで学ぶことは…
- ハンバーガーメニューコンポーネントを作成する
- サイト訪問者がナビゲーションメニューを開閉できるように
<script>
を書く - JavaScriptを
.js
ファイルに移動する
ハンバーガーコンポーネントを作成する
モバイルメニューを開閉する<Hamburger />
コンポーネントを作成します。
-
src/components/
にHamburger.astro
という名前のファイルを作成します。 -
以下のコードをコンポーネントにコピーします。これは、モバイルでナビゲーションリンクを開閉する3行の「ハンバーガー」メニューを表わします。(あとで
global.css
に新しいCSSスタイルを追加します。) -
Header.astro
の<Navigation />
コンポーネントの直前に、新しい<Hamburger />
コンポーネントを配置します。
コードを表示
- 以下のハンバーガーコンポーネント用スタイルを追加します。
初めてのスクリプトタグを書く
ヘッダーはまだインタラクティブではありません。ハンバーガーメニューへのクリックに応じてナビゲーションリンクを表示したり非表示にしたりするように、ユーザーの入力に応答することができないからです。
<script>
タグを追加すると、クライアントサイドのJavaScriptがユーザーのイベントを「待ち受け(Listen)」、それに応答します。
-
index.astro
の</body>
閉じタグの直前に、以下の<script>
タグを追加します。 -
ブラウザのプレビューを複数のサイズで開き、このページのナビゲーションメニューがスクリーンサイズに対してレスポンシブであり、またユーザーの入力に反応することを確認します。
.js
ファイルをインポートする
各ページにJavaScriptを直接書く代わりに、<script>
タグの内容をプロジェクト内の.js
ファイルに移動しましょう。
-
(新しく
/scripts/
フォルダを作成した上で)src/scripts/menu.js
を作成し、JavaScriptをそこに移動します。 -
index.astro
の<script>
タグの内容を以下のファイルインポートに置き換えます。 -
ブラウザのプレビューを再度小さいサイズで開き、ハンバーガーメニューがナビゲーションリンクを開閉することを確認します。
-
他の
about.astro
とblog.astro
の2ページにも同じ<script>
とインポートを追加し、両ページにレスポンシブでインタラクティブなヘッダーがあることを確認します。
これまでにも、サイトの一部を作成するためにJavaScriptを使用してきました。
- ページタイトルと見出しの動的な定義
- 概要ページでのスキルリストのマッピング
- HTML要素の条件に応じた表示
これらの命令はすべてビルド時に実行され、サイトの静的HTMLを作成したあと、コードは「捨てられます」。
<script>
タグ内のJavaScriptはブラウザに送信され、ユーザーの操作に応じてページの更新や入力の切り替えなどを実行します。
確認テスト
-
Astroは、コンポーネントのフロントマターに書かれたJavaScriptをいつ実行しますか?
-
Astroでは任意でJavaScriptをブラウザに送信できますが、その目的は何ですか?
-
クライアントサイドのJavaScriptがユーザーのブラウザに送信されるのは、それがどこに書かれた・インポートされたときですか?