Иногда в текст текст html-страницы сайта требуется внедрить меняющиеся изображения. Реализовывать такую ротацию картинок с помощью GIF или Flash-анимации неудобно и не универсально (т.к. в случае необходимости замены одной из картинок придется «перерисовывать» весь файл микро-галереи), поэтому кажется очевидным необходимость применения JavaScript и одного из его фреймворков – JQuery.
Рассмотрим простейший вариант реализации смены изображений с использованием JQuery без использования его дополнительных плагинов.
Необходимые характеристики скрипта:
- Последовательная смена изображений с ссылками на них.
- Правильный код XHTML.
- Минимальный размер кода.
В итоге мы получим плавную смену заранее заданного списка изображений с эффектом растворения.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Простая замена картинок с помощью JQuery</title> <style type="text/css"> div#rotator {position:relative; height:150px; margin-left: 15px;} div#rotator ul li {float:left; position:absolute; list-style: none;} div#rotator ul li.show {z-index:500;} </style> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <!-- Автор Dylan Wagstaff, http://www.alohatechsupport.net --> <script type="text/javascript"> function theRotator() { // Устанавливаем прозрачность всех картинок в 0 $('div#rotator ul li').css({opacity: 0.0}); // Берем первую картинку и показываем ее (по пути включаем полную видимость) $('div#rotator ul li:first').css({opacity: 1.0}); // Вызываем функцию rotate для запуска слайдшоу, 5000 = смена картинок происходит раз в 5 секунд setInterval('rotate()',5000); } function rotate() { // Берем первую картинку var current = ($('div#rotator ul li.show')? $('div#rotator ul li.show') : $('div#rotator ul li:first')); // Берем следующую картинку, когда дойдем до последней начинаем с начала var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div#rotator ul li:first') :current.next()) : $('div#rotator ul li:first')); // Расскомментируйте, чтобы показвать картинки в случайном порядке // var sibs = current.siblings(); // var rndNum = Math.floor(Math.random() * sibs.length ); // var next = $( sibs[ rndNum ] ); // Подключаем эффект растворения/затухания для показа картинок, css-класс show имеет больший z-index next.css({opacity: 0.0}) .addClass('show') .animate({opacity: 1.0}, 1000); // Прячем текущую картинку current.animate({opacity: 0.0}, 1000) .removeClass('show'); }; $(document).ready(function() { // Запускаем слайдшоу theRotator(); }); </script> </head> <body> <div id="rotator"> <ul> <li class="show"><a href="http://google.ru/"><img src="images/image-1.jpg" width="500" height="313" alt="pic1" /></a></li> <li><a href="http://yandex.ru/"><img src="images/image-2.jpg" width="500" height="313" alt="pic2" /></a></li> <li><a href="http://nigma.ru/"><img src="images/image-3.jpg" width="500" height="313" alt="pic3" /></a></li> </ul> </div> </body> </html> |
Использован метод: http://www.alohatechsupport.net/webdesignmaui/maui-web-site-design/easy_jquery_auto_image_rotator.html с небольшими уточнениями.
Есть один мааленький нюанс этого маленького и легкого скрипта. Посмотрите на загрузку процессора — на моем Ci5 в момент перерисовки картинок показатель ЦП подскакивает на 7-8%. Это очень плохо. Ротаторы на Flash грузят ЦП значительно меньше. Еще в связи с распространением css3 набирают моду т.н. «pure css3 slider», но они грузят ЦП вообще по-черному. Вот вам пример www.joelambert.co.uk/flux/
Скрипт работает, но никак не могу сделать обтекание объекта текстом. Может у кого есть решение?
Напишите как уже пробовали?
Добавлял в свойства объекта
еще создавал отдельную ячейку в таблице для объекта
Похоже, вот тут forum.ixbt.com/topic.cgi?id=24:46040, уже описано рабочее решение
Как тесен мир, это моя же ссылка:)
Но есть проблема в том что слайдшоу закрывает собой выпадющее меню с подразделами, пришлось временно решить передвижением меню в другое место.
Может быть в этой ситуации может помочь z-index?
Спасибо, очень нужный скрипт. Есть странная проблема — нормально работает в IE, Opera, Chrome, Safari И только FireFox рапортует «theRotator is not defined». Что его так глючит? : ( Подскажите, плс
У меня в фоксе чистенько работает
А в joomla работать будет? Что там с jQuery, как его подключить то? Или он по умолчанию на все страницы уже подключен?
Да, за скрипт, спасибо огромное, не пришлось самому придумывать как всё это реализовать!
Всё, разобрался, работает! jQuery подключил стандартно, указав путь к загруженному на сервер файлу.
Единственно, пока не получается убрать маркер списка установленный самим шаблонам, даже «!important» не помогает...
Но ведь можно добавить новый класс и чуть подправить css шаблона =)
Ещё раз автору спасибо.
А кому интересно смотрите (вывел через модуль «Произвольный HTML-код»): ilyc.ru/site4/
Как убрать цикличность? мне нужно чтоб с 1 по последнюю картинку 1 раз проматывал...
Попробуйте строку:
заменить на:
т.е. вызвать один раз.
Спасибо, а по середине страницы как то можно разместить этот сладшоу к примеру как здесь gif анимация в фоновом изображении страницы nastenke.narod.ru/life
setInterval('rotate()',5000); это время 5 скунд смена слайдов поменял как сказали они вообще не перематываются.
Как разместить эти слайды в середине страницы? Не как не могу понять...
Как для каждой картинки отдельный интервал времени поставить?
У меня сначала три раза мигает первая картинка, затем начинается смена. Как от этого избавиться?
Вопрос снят, сам накосячил. Извиняюсь...
Здравствуйте, вставил скрипт на сайт, а можно добавить возможность пользователю выбирать картинки? Например при помощи точек, чтобы не ждать пока все промигают, если хочется сразу посмотреть к примеру 4-ую?
Привет, лучше поискать более подходящий скрипт честно, их на самом деле куча, как голых типа описанного, так и оформленных в модули к различным CMS.