JavaScript: главный инструмент frontend-разработчиков
Что такое JavaScript, знает каждый веб-программист — это великий и ужасный язык скриптов, который любят и ненавидят, но без которого не обойтись.
vlada_maestro / shutterstock
JavaScript — это язык скриптов, на котором держится весь frontend веб-разработки. Он позволяет перехватывать события и выполнять различные действия. Например, пользователь кликнул по какой-нибудь кнопке — сработало событие click. И, связав с ним, мы можем выполнить нужную нам функцию — открыть модальное окно или изменить цвет элемента.
JavaScript используется для того, чтобы делать страницы интерактивными, то есть дать пользователю возможность взаимодействовать с элементами. Когда страницы могут реагировать на какие-то действия, это делает их интереснее. Если, конечно, не намешано много безвкусицы.
Для чего нужен JavaScript
В JS можно работать с переменными, объектами, функциями, условиями, математическими и логическими операторами и так далее. Давайте разберем это на примере реальных возможностей.
Теперь, когда вы узнали, что такое JavaScript, давайте представим, что у нас есть такой сайт:
Внутри статьи есть три кнопки, которые выполняют разные функции при нажатии на них:
Тут функции и события прописаны прямо в HTML-коде. Указан атрибут onclick — он задает действия при срабатывании события. Внутри атрибута прописаны функции alert (), confirm () и prompt (). Первая просто выводит какое-то сообщение — в нашем случае будет выведена надпись «Открывается модальное окно». Вторая функция запрашивает подтверждение, а третья — просит еще и ввести что-нибудь.
Вот как это выглядит:
Если функция alert () просто предупреждает о чем-то, то остальные получают от пользователя какую-нибудь информацию. Чтобы ее получить, нужно использовать переменные:
Теперь результат вызванной функции будет записываться в переменные confirmed и email. Например, если после вопроса «Хотите подписаться?» пользователь ответит утвердительно, то значение будет true (истина), а если отрицательно — false (ложь). Эти значения можно использовать в условиях, о которых мы поговорим чуть позже.
А вот в email будет записано то, что введет пользователь. И потом эти данные можно будет использовать, например, чтобы внести их в базу данных или использовать во время вычислений или работы какой-нибудь функции.
Проблема в том, что, записывая функции в атрибуты элементов, мы ограничиваем себя в возможностях и немного путаем. Лучше не смешивать HTML и JS, чтобы не сталкиваться с проблемами, когда придется что-то изменить.
Записывайте код на JavaScript в тег <script>. У него два основных атрибута — type и src. В первом указывается тип скрипта (в нашем случае значение будет text/javascript), а во втором — ссылка на файл. Если ее не указать, будет выполняться то, что записано внутри тега, а если указать — то, что прописано в файле.
Давайте реализуем то, что у нас есть, с помощью тега <script>. Для начала нужно указать идентификаторы для кнопок:
Теперь по этим идентификаторам мы можем обратиться к элементам через JS:
Этот код, как вы могли заметить, помещает элемент с выбранным идентификатором в переменную. Только на этот раз используется слово var (сокращение от variable — переменная). Оно нужно для того, чтобы объявить переменную в первый раз. Если она уже объявлена, это слово использовать не нужно. Получая в качестве значения элемент, переменная становится объектом.
И теперь мы можем прописать события и вызываемые функции, которые сейчас создадим:
Мы создали функции getConfirm () и getEmail (). В них мы записали то, что было в атрибуте onclick. Это нужно для того, чтобы выполнить несколько команд. Теперь пропишем события для объектов.
Обратите внимание, что функции прописаны без скобок. Если мы поставим скобки, то функция выполнится сразу же, как загрузится скрипт. Например, если мы внесем все эти изменения в код и перезагрузим страницу, то увидим модальное окно с надписью «Ку-ку!». А вот функции getConfirm () и getEmail () выполнятся как надо.
Несмотря на то что этот код работает, модальные окна лучше не использовать, потому что они не позволяют пользователю взаимодействовать с сайтом, пока он не закроет окно. А это не лучший способ создать дружелюбный интерфейс. Вместо этого создадим отдельный элемент, который будет всплывать после какого-нибудь события, — поп-ап:
А теперь укажем стили:
Вот как это выглядит:
Пока мы не прописали JS, поп-ап будет просто висеть справа, но не будет закрываться. Форма уже работает, но для отправки данных нужно перейти на другую страницу. Это не очень удобно, потому что пользователь зашел на сайт, чтобы прочесть какую-то статью или посмотреть ролик. И в наших интересах удержать его как можно дольше, а не уводить куда-то еще.
Для начала давайте сделаем так, чтобы поп-ап появлялся не сразу. Для этого в CSS пропишем его положение с правой стороны в минусовое значение:
Теперь запишем немного JS-кода:
Теперь поп-ап будет скрыт в самом начале, а через 3 секунды появится. Его можно будет закрыть при нажатии на крестик, а при отправке данных мы не будем переходить на другую страницу. Данные вообще не будут отправляться в обработчик, но это можно исправить с помощью технологии AJAX (о ней позже).
Поп-ап на JavaScript готов:
Для чего нужны фреймворки JavaScript
Фреймворки — это специальные библиотеки, которые упрощают задачу разработчиков. Принцип работы следующий: вы подключаете JS-файл, в котором много разных функций. Например, на чистом JavaScript нужно писать объемную конструкцию, чтобы получить элемент в переменную:
В файле с фреймворком может быть записана следующая функция:
И теперь вам достаточно вызвать функцию, чтобы получить любой элемент по идентификатору, классу, тегу, имени и так далее:
Таким образом мы только что создали собственный фреймворк, в котором всего одна функция. Новые фреймворки появляются несколько раз за неделю, поэтому ничего особенного в этом нет.
Одна из самых популярных библиотек — это jQuery. Ее стоит изучить новичкам, и только потом браться за что-то другое. В целом jQuery универсальна, но мы воспользуемся только функцией AJAX, чтобы отправить данные для подписки.
Немного изменим функцию, которая вызывается, когда мы отправляем свой почтовый адрес:
Здесь мы вызываем функцию post () объекта $ (он же jquery). В post () передаются два параметра: адрес и переменные для отправки. В нашем случае это subscribe.php и почтовый ящик соответственно. После завершения работы post () вызывается функция done (), в которую попадает переменная data — в ней находится ответ от обработчика. Дальше мы выводим эту переменную в поп-апе и ставим таймер на закрытие.
Теперь дело за малым — написать обработчик. Сделать это можно на PHP
или каком-нибудь другом языке. Вот суперпростой пример:
Тут мы проверяем, пришел ли адрес электронной почты, отправленный методом post, и для удобства помещаем его в переменную $email. Затем проверяем, не пустая ли переменная, а потом выводим текст на экран. Этот текст и будет отправлен обратно в переменной data.
Вот что мы получаем в итоге:
Также эту технологию можно использовать, чтобы создать веб-приложение — сайт, на котором всё находится на одной странице. Хороший пример — «ВКонтакте». Там все переходы и изменения происходят без обновления. В нашем случае мы можем менять текст в зависимости от страницы. Для этого будем перехватывать нажатия на кнопки в меню и загружать текст из серверной части.
Вот HTML-код нашего меню:
Вот как мы реализуем JS-код:
Сначала мы создаем функцию, которая получает объект (нажатая кнопка). Мы убираем у прошлой активной кнопки класс nav__curr и даем его новой кнопке. Затем отправляем запрос в файл load.php и выводим полученное содержимое в тег article.
В обработчике мы получаем переменную с частью идентификатора кнопки и выводим соответствующий текст:
Вот как выглядит результат:
Другие возможности JavaScript
Мы коротко рассмотрели, как:
- работать с функциями, переменными и объектами;
- получать элементы и изменять их атрибуты, стили и содержимое;
- отправлять запросы на сервер и получать ответ;
- устанавливать таймеры;
- использовать условия.
Еще на JavaScript можно работать с анимацией, проводить вычисления, рисовать на холсте (canvas), создавать cookies и многое другое. Мы поговорили лишь о малой части тех возможностей, которые доступны разработчику на JavaScript, — описать их в одной статье невозможно. Именно поэтому JS так популярен. Ну и еще потому, что у него нет альтернатив.