В этом уроке мы рассмотрим ваш обычный ежедневный веб-сайт и улучшим его с помощью 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>
|
Шаг 1
Прежде всего, скачайте последнюю стабильную версию jQuery и дайте ссылку на нее в своем документе:
1
|
<script type=»text/javascript» src=»jQuery.js»></script>
|
На мой взгляд, одна из лучших вещей в jQuery — это простота. Мы можем достичь функциональности, описанной выше, в сочетании с потрясающими эффектами всего в нескольких строках кода.
Сначала давайте загрузим библиотеку jQuery и запустим функцию, когда документ будет готов (когда загружен DOM).
$ (документ) .ready (function () { // Материал здесь });
Шаг 2
Итак, мы хотим сделать так, чтобы, когда пользователь нажимает на ссылку в меню навигации на нашей странице, браузер не переходил на соответствующую страницу, а загружал содержимое этой страницы на текущей странице.
Мы хотим настроить таргетинг на ссылки внутри навигационного меню и запустить функцию, когда на них нажимают:
$ ('# nav li a'). click (function () { // функция здесь });
Давайте подведем итог, что мы хотим, чтобы эта функция делала в порядке событий:
- Удалить содержимое текущей страницы.
- Получить новый контент страницы и добавить в контент DIV.
Нам нужно определить, с какой страницы получать данные при нажатии на ссылку. Все, что нам нужно сделать, — это получить атрибут href по нажатой ссылке и определить его как страницу, с которой нужно вызывать данные, плюс нам нужно определить местонахождение запрашиваемой страницы, с которой нужно извлечь данные, т.е. Вы хотите получить ВСЕ данные, только данные внутри div ‘content’, поэтому:
var toLoad = $ (this) .attr ('href') + '#content';
Чтобы проиллюстрировать, что делает приведенный выше код, давайте представим, что пользователь нажимает ссылку «о», которая ссылается на «about.html» — в этой ситуации эта переменная будет выглядеть так: «about.html #content» — это переменная, которую мы » Запрошу в Аяксе вызов. Во-первых, нам нужно создать приятный эффект для содержимого текущей страницы. Вместо того, чтобы просто исчезнуть, мы собираемся использовать функцию «Hide» в jQuery:
$ ( '# Содержание') скрыть ( 'быстро', LoadContent).
Вышеприведенная функция «скрывает» #content div с высокой скоростью, и как только этот эффект завершается, она запускает функцию «loadContent» (загрузка нового содержимого [через ajax]) — функцию, которую мы определим позже (на шаге 4 ).
Шаг 3
После того, как старый контент исчезает с удивительным эффектом, мы не хотим оставлять пользователей интересующимися до того, как новый контент появится (особенно если у них медленное интернет-соединение), поэтому мы создадим небольшую «загрузочную» графику, чтобы они знали что-то происходит на заднем плане:
$ ('# wrapper'). append ('<span id = "load"> LOADING ... </ span>'); $ ( '# Загружаем') FadeIn ( 'нормальный').
Вот 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, пока не будет снова исчез.
Шаг 4
До сих пор, когда пользователь нажимает на одну из ссылок, происходит следующее:
- Текущий контент исчезает с классным эффектом
- Появляется сообщение о загрузке
Теперь давайте напишем ту функцию loadContent, которую мы вызывали ранее:
function loadContent () { $ ( '# Содержание'). Нагрузка (toLoad, '', showNewContent) }
Функция loadContent вызывает запрошенную страницу, а затем, как только это будет сделано, вызывает функцию ‘showNewContent’:
function showNewContent () { . $ ( '# Содержание') показывает ( 'нормальное', hideLoader); }
Эта функция showNewContent использует функцию show в jQuery (которая на самом деле является очень скучным именем для очень крутого эффекта), чтобы новый (запрошенный) контент появлялся внутри div #content. Как только он вызвал контент, он запускает функцию hideLoader:
function hideLoader () { $ ( '# Загружает') Затухание ( 'нормальные'). }
Мы должны помнить, что нужно возвращать false в конце нашей функции щелчка — это так, чтобы браузер не переходил на страницу
Это должно работать отлично сейчас. Вы можете увидеть пример этого здесь: [ССЫЛКА]
Вот код на данный момент:
$ (документ) .ready (function () { $ ('# nav li a'). click (function () { var toLoad = $ (this) .attr ('href') + '#content'; $ ( '# Содержание') скрыть ( 'быстро', LoadContent). $ ( '# Загружаем') удалить (). $ ('# wrapper'). append ('<span id = "load"> LOADING ... </ span>'); $ ( '# Загружаем') FadeIn ( 'нормальный'). function loadContent () { $ ( '# Содержание'). Нагрузка (toLoad, '', showNewContent ()) } function showNewContent () { . $ ( '# Содержание') показывает ( 'нормальное', hideLoader ()); } function hideLoader () { $ ( '# Загружает') Затухание ( 'нормальные'). } вернуть ложь; }); });
Шаг 5
Вы можете остановиться на этом, но если вы беспокоитесь о юзабилити (что и должно быть), важно сделать немного больше работы. Проблема нашего текущего решения заключается в том, что он игнорирует URL. Что если пользователь захочет дать ссылку на одну из «страниц»? — У них нет возможности сделать это, потому что URL всегда один и тот же.
Таким образом, лучший способ сделать это — использовать значение ‘hash’ в URL, чтобы указать, что просматривает пользователь. Таким образом, если пользователь просматривает контент «о», то URL может быть следующим: « www.website.com/#about» . Нам нужно добавить только одну строку кода в функцию «click», чтобы хеш добавлялся в URL всякий раз, когда пользователь нажимает навигационную ссылку:
window.location.hash = $ (this) .attr ('href'). substr (0, $ (this) .attr ('href'). length-5);
Приведенный выше код в основном изменяет значение хеш-функции URL-адреса на значение атрибута href по нажатой ссылке (за исключением расширения .html). Поэтому, когда пользователь нажимает ссылку «home» (href = index.html), тогда хэш значение будет читаться как «#index».
Кроме того, мы хотим, чтобы пользователь мог ввести URL-адрес и получить правильную страницу. Для этого мы проверяем значение хеша при загрузке страницы и соответственно меняем содержимое:
var hash = window.location.hash.substr (1); var href = $ ('# nav li a'). each (function () { var href = $ (this) .attr ('href'); если (хэш == href.substr (0, href.length-5)) { var toLoad = hash + '. html #content'; $ ( '# Содержание'). Нагрузка (toLoad) } });
С этим здесь включен весь необходимый код javascript: (плюс библиотека jQuery)
$ (документ) .ready (function () { // Проверяем значение хеша в URL var hash = window.location.hash.substr (1); var href = $ ('# nav li a'). each (function () { var href = $ (this) .attr ('href'); если (хэш == href.substr (0, href.length-5)) { var toLoad = hash + '. html #content'; $ ( '# Содержание'). Нагрузка (toLoad) } }); $ ('# nav li a'). click (function () { var toLoad = $ (this) .attr ('href') + '#content'; $ ( '# Содержание') скрыть ( 'быстро', LoadContent). $ ( '# Загружаем') удалить (). $ ('# wrapper'). append ('<span id = "load"> LOADING ... </ span>'); $ ( '# Загружаем') FadeIn ( 'нормальный'). window.location.hash = $ (this) .attr ('href'). substr (0, $ (this) .attr ('href'). length-5); function loadContent () { $ ( '# Содержание'). Нагрузка (toLoad, '', showNewContent ()) } function showNewContent () { . $ ( '# Содержание') показывает ( 'нормальное', hideLoader ()); } function hideLoader () { $ ( '# Загружает') Затухание ( 'нормальные'). } вернуть ложь; }); });
Законченный…
Отличительной особенностью этого метода является то, что он адаптируется и может быть применен к сайту за считанные минуты. Это совершенно незаметно, и веб-сайт будет работать нормально, если у пользователя отключен JS.