Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

Загрузка и анимация контента при помощи jQuery.

by
Difficulty:IntermediateLength:ShortLanguages:

Russian (Pусский) translation by AlexBioJS (you can also view the original English article)

В этом руководстве мы рассмотрим обычный веб-сайт и улучшим его при помощи jQuery. Мы добавим функциональность AJAX для того, чтобы контент загружался в соответствующий контейнер без необходимости перехода пользователя на другую страницу. Также мы добавим несколько крутых анимационных эффектов.




Итак, прежде всего, я создал очень простой макет для данного примера. Ниже показан скриншот и код, которые будем использовать.


Шаг 1

Для начала, перейдите по ссылке и скачайте последнюю стабильную версию jQuery и добавьте ее в свой документ.

На мой взгляд, одно из основных преимуществ библиотеки jQuery - простота ее использования. Для реализации описанного выше функционала и классных эффектов нам необходимо написать всего несколько строк кода.

Первым делом, давайте загрузим библиотеку jQuery и вызовем функцию, когда документ готов к манипуляциям (когда DOM (Объектная модель документа. Здесь и далее примеч. пер.) загружена).


Шаг 2

Итак, мы хотим сделать следующее: когда пользователь кликает по ссылке внутри навигационного меню на нашей странице, браузер вместо перехода на соответствующую страницу загружает контент этой страницы в текущую.

Мы хотим выбрать ссылки внутри навигационного меню и вызвать функцию при клике на них:

Давайте подытожим действия функции по порядку событий:

  1. Удаление контента текущей страницы.
  2. Помещение контента новой страницы в блок DIV с содержимым.

Нам необходимо указать страницу, из которой будем загружать данные при клике на ссылку. Для этого нам необходимо лишь выбрать атрибут 'href' ссылки, по которой кликнули. Полученное выражение соответствует странице, из которой будем запрашивать данные. Также нам нужно определить, откуда будем брать данные из запрашиваемой страницы. То есть, мы бы не хотели взять все данные, а только данные из div с контентом. Таким образом, получаем:

Для иллюстрации работы вышеуказанного кода представим, что пользователь щелкает линк 'about', который ссылается на страницу 'about.html'. В данном случае значением переменной было бы: 'about.html #content'.Именно его мы и будем использовать в запросе AJAX. Однако для начала нам необходимо сделать изящный эффект для контента текущей страницы. Вместо простого удаления контента мы собираемся использовать функцию 'hide' jQuery следующим образом:

Вышеупомянутый код "скрывает" #content div быстрыми темпами. После завершения эффекта происходит вызов функции 'loadContent', которая загружает новый контент при помощи запроса AJAX. Эту функцию мы определим позже (Шаг 4).


Шаг 3

Как только старый контент эффектно исчезает, нам не хотелось бы оставить пользователя просто гадать, все ли в порядке с приложением, до поступления нового контента (особенно, если у него медленное интернет-соединение). Поэтому мы создадим небольшой рисунок "загрузки", благодаря которому они будут знать, что что-то происходит на заднем плане.

Ниже приведен код CSS (* Cascading Style Sheets, каскадные таблицы стилей) для только что созданного span #load:

Как показано выше, по умолчанию для данного 'индикатора загрузки' span задано свойство display:none. Однако при вызове функции fadeIn (выше в коде) элемент появится в правом верхнем углу сайта вместе с анимированным изображением в формате GIF (* Graphics Interchange Format, формат обмена графическими данными).


Шаг 4

На данный момент при клике пользователем какой-либо ссылки произойдет следующее:

  1. Эффектно исчезнет текущий контент.
  2. Появится сообщение о загрузке.

Давайте теперь определим функцию loadContent, которую вызывали ранее:

Функция loadContent запрашивает необходимую пользователю страницу и, как только запрос выполнен, вызывает функцию 'showNewContent':

Эта функция showNewContent использует функцию jQuery show (скучноватое название для осуществляемого ею крутого эффекта) для показа нового (запрашиваемого) контента в элементе div '#content'. После показа контента данная функция вызывает функцию 'hideLoader':

Следует помнить, что в конце функции нам необходимо «вернуть false» с тем, чтобы браузер не переходил на страницу.

Теперь функция должна работать как задумывалось. Вы можете посмотреть пример по ссылке [LINK].

Ниже приведен код на данный момент:


Шаг 5

На этом можно было бы остановиться. Однако, если вы заботитесь о usability (удобств и простота использования) вашего сайта (и стоило бы), то нужно добавить еще кое-что. Недостаток нашего подхода - пренебрежение URL-адресом (унифицированный указатель [местонахождения информационного] ресурса). Если бы пользователь захотел сослаться на одну из "страниц",  у него бы не вышло, поскольку URL-адрес неизменен.

Чтобы это исправить, можно было бы воспользоваться значением hash-компонента (часть URL, которая идет после символа решетки '#', включая символ '#') URL-адреса для указания страницы, которую просматривает пользователь. Следовательно, если пользователь просматривает контент 'about', то URL-адрес мог бы быть следующим: 'www.website.com/#about'. Для добавления hash к URL-адресу каждый раз, когда пользователь кликает ссылку навигационного меню, нам необходимо добавить всего лишь одну строку кода в функцию 'click'.

Вышеуказанный код изменяет значение hash URL-адреса на значение атрибута 'href' кликнутой ссылки (исключая расширение '.html'). Таким образом, если пользователь кликает по ссылке 'home' (href=index.html), то значением hash будет '#index'.

Также мы бы хотели, чтобы у пользователя была возможность вписать URL-адрес и быть перенаправленным на нужную страницу. Для этого мы проверяем значение hash при загрузке страницы и изменяем контент соответствующим образом:

Ниже приведен весь необходимый код javascript с учетом вышеуказанного (добавьте библиотеку jQuery):


Завершено...

Одно из преимуществ данного подхода заключается в том, что его можно адаптировать и применить к веб-сайту за несколько минут. Он полностью соответствует требованиям ненавязчивого Javascript. Веб-сайт будет нормально работать (* будет отображаться контент, но перестанут работать крутые эффекты jQuery) и при отключенном Javascript пользователя.

Посмотреть конечный работающий пример

Загрузить HTML, JS, CSS и изображения

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.