Статьи

Как загрузить и анимировать контент с помощью jQuery

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

Итак, во-первых, я собрал очень простой макет для этого примера. Вот скриншот и HTML-код, который мы будем использовать.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»>
<html xmlns=»http://www.w3.org/1999/xhtml»>
<head>
<meta http-equiv=»Content-Type» content=»text/html; charset=utf-8″ />
<title>mmm… Ajax!</title>
<script type=»text/javascript» src=»jquery.js»></script>
<style type=»text/css»>
@import url(css.css);
</style>
<script type=»text/javascript» src=»js.js»></script>
</head>
<body>
    <div id=»wrapper»>
    <h1>ajax … nettuts</h1>
    <ul id=»nav»>
        <li><a href=»index.html»>welcome</a></li>
        <li><a href=»about.html»>about</a></li>
        <li><a href=»portfolio.html»>portfolio</a></li>
        <li><a href=»contact.html»>contact</a></li>
        <li><a href=»terms.html»>terms</a></li>
    </ul>
    <div id=»content»>
        <h2>Welcome!</h2>
        <p>Text</p>
    </div>
    <div id=»foot»>Tutorial by James for NETTUTS</div>
</div>
</body>
</html>

Прежде всего, скачайте последнюю стабильную версию jQuery и дайте ссылку на нее в своем документе:

1
<script type=»text/javascript» src=»jQuery.js»></script>

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

Сначала давайте загрузим библиотеку jQuery и запустим функцию, когда документ будет готов (когда загружен DOM).


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

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

Давайте подведем итог, что мы хотим, чтобы эта функция делала в порядке событий:

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

Нам нужно определить, с какой страницы получать данные при нажатии на ссылку. Все, что нам нужно сделать, — это получить атрибут href по нажатой ссылке и определить его как страницу, с которой нужно вызывать данные, плюс нам нужно определить местонахождение запрашиваемой страницы, с которой нужно извлечь данные, т.е. Вы хотите получить ВСЕ данные, только данные внутри div ‘content’, поэтому:

Чтобы проиллюстрировать, что делает приведенный выше код, давайте представим, что пользователь нажимает ссылку «о», которая ссылается на «about.html» — в этой ситуации эта переменная будет выглядеть так: «about.html #content» — это переменная, которую мы » Запрошу в Аяксе вызов. Во-первых, нам нужно создать приятный эффект для содержимого текущей страницы. Вместо того, чтобы просто исчезнуть, мы собираемся использовать функцию «Hide» в jQuery:

Вышеприведенная функция «скрывает» #content div с высокой скоростью, и как только этот эффект завершается, она запускает функцию «loadContent» (загрузка нового содержимого [через ajax]) — функцию, которую мы определим позже (на шаге 4 ).


После того, как старый контент исчезает с удивительным эффектом, мы не хотим оставлять пользователей интересующимися до того, как новый контент появится (особенно если у них медленное интернет-соединение), поэтому мы создадим небольшую «загрузочную» графику, чтобы они знали что-то происходит на заднем плане:

Вот CSS, примененный к недавно созданному div #load:

01
02
03
04
05
06
07
08
09
10
#load {
    display: none;
    position: absolute;
    right: 10px;
    top: 10px;
    background: url(images/ajax-loader.gif);
    width: 43px;
    height: 11px;
    text-indent: -9999em;
}

Таким образом, по умолчанию для этого диапазона загрузки установлено значение display: none, но когда инициируется функция fadeIn (в приведенном выше коде), она будет перетекать в верхний правый угол сайта и отображать наш анимированный GIF, пока не будет снова исчез.


До сих пор, когда пользователь нажимает на одну из ссылок, происходит следующее:

  1. Текущий контент исчезает с классным эффектом
  2. Появляется сообщение о загрузке

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

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

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

Мы должны помнить, что нужно возвращать false в конце нашей функции щелчка — это так, чтобы браузер не переходил на страницу

Это должно работать отлично сейчас. Вы можете увидеть пример этого здесь: [ССЫЛКА]

Вот код на данный момент:


Вы можете остановиться на этом, но если вы беспокоитесь о юзабилити (что и должно быть), важно сделать немного больше работы. Проблема нашего текущего решения заключается в том, что он игнорирует URL. Что если пользователь захочет дать ссылку на одну из «страниц»? — У них нет возможности сделать это, потому что URL всегда один и тот же.

Таким образом, лучший способ сделать это — использовать значение ‘hash’ в URL, чтобы указать, что просматривает пользователь. Таким образом, если пользователь просматривает контент «о», то URL может быть следующим: « www.website.com/#about» . Нам нужно добавить только одну строку кода в функцию «click», чтобы хеш добавлялся в URL всякий раз, когда пользователь нажимает навигационную ссылку:

Приведенный выше код в основном изменяет значение хеш-функции URL-адреса на значение атрибута href по нажатой ссылке (за исключением расширения .html). Поэтому, когда пользователь нажимает ссылку «home» (href = index.html), тогда хэш значение будет читаться как «#index».

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

С этим здесь включен весь необходимый код javascript: (плюс библиотека jQuery)


Отличительной особенностью этого метода является то, что он адаптируется и может быть применен к сайту за считанные минуты. Это совершенно незаметно, и веб-сайт будет работать нормально, если у пользователя отключен JS.

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

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