Отправьте свой первый скрипт в браузер
Давайте добавим гамбургер-меню для открытия и закрытия ссылок на мобильных экранах, что потребует некоторой интерактивности на стороне клиента!
Приготовьтесь…
- Создать компонент гамбургер-меню
- Написать
<script>, чтобы позволить посетителям вашего сайта открывать и закрывать меню навигации - Переместить ваш JavaScript в файл
.js
Создание компонента Hamburger
Заголовок раздела Создание компонента HamburgerСоздайте компонент <Hamburger />, чтобы открывать и закрывать ваше мобильное меню.
-
Создайте файл с именем
Hamburger.astroвsrc/components/. -
Скопируйте следующий код в ваш компонент. Он будет представлять собой 3-строчное меню “гамбургер” для открытия и закрытия навигационных ссылок на мобильных устройствах. (Вы добавите новые CSS-стили в
global.cssпозже).src/components/Hamburger.astro ------<div class="hamburger"><span class="line"></span><span class="line"></span><span class="line"></span></div> -
Поместите этот новый компонент
<Hamburger />непосредственно перед компонентом<Navigation />в файлеHeader.astro.Покажите мне код!
src/components/Header.astro ---import Hamburger from './Hamburger.astro';import Navigation from './Navigation.astro';---<header><nav><Hamburger /><Navigation /></nav></header> -
Добавьте следующие стили для компонента Hamburger:
src/styles/global.css /* стили для навигации */.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>.src/pages/index.astro <Footer /><script>document.querySelector('.hamburger').addEventListener('click', () => {document.querySelector('.nav-links').classList.toggle('expanded');});</script></body> -
Снова проверьте предварительный просмотр в браузере на различных размерах экрана и убедитесь, что у вас есть работающее меню навигации, которое реагирует как на размер экрана, так и на действия пользователя на этой странице.
Импорт файла .js
Заголовок раздела Импорт файла .jsВместо того чтобы писать JavaScript непосредственно на каждой странице, вы можете перенести содержимое тега <script> в собственный файл .js в вашем проекте.
-
Создайте папку
src/scripts/menu.js (вам придется создать новую папку/scripts/`) и перенесите в нее ваш JavaScript.src/scripts/menu.js document.querySelector('.hamburger').addEventListener('click', () => {document.querySelector('.nav-links').classList.toggle('expanded');}); -
Замените содержимое тега
<script>в файлеindex.astroна следующий импорт файла:src/pages/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, и убедитесь, что на каждой из них есть отзывчивая интерактивная шапка.src/pages/about.astro & src/pages/blog.astro <Footer /><script>import "../scripts/menu.js";</script></body>
Ранее вы уже использовали JavaScript для создания некоторых частей вашего сайта:
- Динамического определения заголовка и названия страницы
- Отображения списка навыков на странице “О сайте”
- Условного отображения HTML-элементов
Все эти команды выполняются во время сборки для создания статического HTML для вашего сайта, а затем код “отбрасывается”.
JavaScript в теге <script> отправляется в браузер и доступен для выполнения при взаимодействии с пользователем, например при обновлении страницы или переключении ввода.
Проверьте свои знания
Заголовок раздела Проверьте свои знания-
Когда Astro выполняет JavaScript, написанный во frontmatter компонента?
-
Дополнительно, Astro может отправить JavaScript в браузер, чтобы разрешить:
-
JavaScript на стороне клиента будет отправлен в браузер пользователя, когда он будет написан или импортирован: