Отправьте свой первый скрипт в браузер
Давайте добавим гамбургер-меню для открытия и закрытия ссылок на мобильных экранах, что потребует некоторой интерактивности на стороне клиента!
Приготовьтесь…
- Создать компонент гамбургер-меню
- Написать
<script>, чтобы позволить посетителям вашего сайта открывать и закрывать меню навигации - Переместить ваш JavaScript в файл
.js
Создание компонента Hamburger
Создайте компонент <Hamburger />, чтобы открывать и закрывать ваше мобильное меню.
Создайте файл с именем
Hamburger.astroвsrc/components/.Скопируйте следующий код в ваш компонент. Он будет представлять собой 3-строчное меню «гамбургер» для открытия и закрытия навигационных ссылок на мобильных устройствах. (Вы добавите новые CSS-стили в
global.cssпозже).--- --- <div class="hamburger"> <span class="line"></span> <span class="line"></span> <span class="line"></span> </div>Поместите этот новый компонент
<Hamburger />непосредственно перед компонентом<Navigation />в файлеHeader.astro.Покажите мне код!
--- import Hamburger from './Hamburger.astro'; import Navigation from './Navigation.astro'; --- <header> <nav> <Hamburger /> <Navigation /> </nav> </header>Добавьте следующие стили для компонента Hamburger:
/* стили для навигации */ .hamburger { padding-right: 20px; cursor: pointer; } .hamburger .line { display: block; width: 40px; height: 5px; margin-bottom: 10px; background-color: #ff9776; } .nav-links { width: 100%; top: 5rem; left: 48px; background-color: #ff9776; display: none; margin: 0; } .nav-links a { display: block; text-align: center; padding: 10px 0; text-decoration: none; font-size: 1.2rem; font-weight: bold; text-transform: uppercase; } .nav-links a:hover, a:focus { background-color: #ff9776; } .expanded { display: unset; } @media screen and (min-width: 636px) { .nav-links { margin-left: 5em; display: block; position: static; width: auto; background: none; } .nav-links a { display: inline-block; padding: 15px 20px; } .hamburger { display: none; } }
Напишите ваш первый тег скрипта
Ваш заголовок ещё не интерактивен, потому что он не может реагировать на ввод пользователя, например, на нажатие на гамбургер-меню, чтобы показать или скрыть навигационные ссылки.
Добавление тега <script> предоставляет JavaScript на стороне клиента, чтобы «прослушивать» события пользователя и реагировать соответствующим образом.
Добавьте следующий тег
<script>вindex.astro, непосредственно перед закрывающим тегом</body>.<Footer /> <script> document.querySelector('.hamburger').addEventListener('click', () => { document.querySelector('.nav-links').classList.toggle('expanded'); }); </script> </body>Снова проверьте предварительный просмотр в браузере на различных размерах экрана и убедитесь, что у вас есть работающее меню навигации, которое реагирует как на размер экрана, так и на действия пользователя на этой странице.
Импортируйте файл .js
Вместо того чтобы писать JavaScript непосредственно на каждой странице, вы можете перенести содержимое тега <script> в собственный файл .js в вашем проекте.
Создайте файл
src/scripts/menu.js (вам придется создать новую папку/scripts/`) и перенесите в него ваш JavaScript.document.querySelector('.hamburger').addEventListener('click', () => { document.querySelector('.nav-links').classList.toggle('expanded'); });Замените содержимое тега
<script>в файлеindex.astroна следующий импорт файла:<Footer /> <script> document.querySelector('.hamburger').addEventListener('click', () => { document.querySelector('.nav-links').classList.toggle('expanded'); }); import "../scripts/menu.js"; </script> </body>Проверьте предварительный просмотр в браузере снова на меньших размерах и убедитесь, что меню гамбургера по-прежнему открывает и закрывает ваши навигационные ссылки.
Добавьте тот же
<script>с импортом на две другие страницы,about.astroиblog.astro, и убедитесь, что на каждой из них есть отзывчивая интерактивная шапка.<Footer /> <script> import "../scripts/menu.js"; </script> </body>
:::note[На заметку]Ранее вы уже использовали JavaScript для создания некоторых частей вашего сайта:
- Динамического определения заголовка и названия страницы
- Отображения списка навыков на странице «О сайте»
- Отображения HTML-элементов по условию
Все эти команды выполняются во время сборки для создания статического HTML для вашего сайта, а затем код «отбрасывается».
JavaScript в теге <script> отправляется в браузер и доступен для выполнения при взаимодействии с пользователем, например, при обновлении страницы или переключении ввода.:::
Проверьте свои знания
Когда Astro выполняет JavaScript, написанный в метаданных компонента?
Дополнительно, Astro может отправить JavaScript в браузер, чтобы разрешить:
JavaScript на стороне клиента будет отправлен в браузер пользователя, когда он будет написан или импортирован: