Иногда в текст текст 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 с небольшими уточнениями.
Доброе время суток!
ставлю на сайт ucoz и отображается только 1 картинка и ничего не происходит. Подскажите как мне это исправить??? заранее спасибо
Привет, Ксения, теоретически может быть что скрипт не дружит с ucos по какой-то причине, например, возможен конфликт с «родными» скриптами укоза. Попробуйте спросить службу поддержки самого ucoz-а на тему «почему этот скрипт может не работать». Вдруг у них будут полезные идеи.
Кирилл, а как на счет моей проблемы со ссылками?
Думаю стоит перепроверить исходный код страницы, а именно, наличие тегов ссылок вокруг всех картинок.
Кирилл, теги ссылок есть везде кроме последней картинки. Я ее специально убрал так как работала только она (на всех картинках). А вот title прописан везде, и на всех картинках показывается только с последней картинки. Получается что активна всегда только последняя картинка.
div#rotator ul li.show {z-index:500;}
— похоже, не хватает в вашем css.Спасибо!!! Помогло. Огромное спасибо!!!!!!!!!
Можно сделать совместимым с другими фреймворками код так:
jQuery(function($){ //здесь весь код });
А вообще ставьте себе мозиллу и фаербаг.
помогите не отображается в центре страницы это слайд шоу
какую часть кода нужно изменить, чтобы в любом браузере слаайдшоу было в центре???
Помогите пожалуйста
Жду ответа заранее благодарен
Если не трудно, помогите разобраться со сменой картинок в нескольких местах. Способ предложенный nikitos_one неработает, Dremw вообще в строке «$('div.rotator:eq('+i+') ul li').css({opacity: 0.0}); $('div.rotator:eq('+i+') ul» видит ошибку, в конечном итоге ничего неработает.
С вариантом смены одной картинки всё понятно и работает, спасибо большое, а вот как быть со сменой в нескольких местах...
А как сделать, чтобы когда обновляешь страницу, картинка была рандомной, а не одной и тойже?
Так, рандомность я сделал, скачав ротатор, но проблема в том, что у меня картинки ведут в категории и приходится ждать, когда пройдет пройдет 1-я картинка. Вообще возможно ли убрать из кода «первую картину», чтобы постоянная рандомность была.
Спасибо, скрипт хорошо работает, но как сделать две таких рамки? Изменение селекторов не помогло
Такой же вопрос, как сделать чтобы отображалось 3 таких рамки, и чтобы они использовали одни и те же картинки.
Зравствуйте!
Огромная благодарность автору за простой и практичный скриптик. Сегодня пол дня пролазил по просторам инета в поиске такой вещи.
Все фунциклирует у меня (что касается баннера), но вот, почему-то (сверху него у меня стоит блок с выпадающим меню) закрывает выпадающее меню.
Не вкурсе как указать что на первом плане должно показывать меню а баннер — снизу?
Извиняюсь... Нашел уже решение. Просто покопался в стиле самого блока меню.
Что не одно — то другое...
Никак не могу найти решение следующей проблемы!
При установке баннера на сранице, подставляется откудо-то «1» слева (между тэгами *** 1 ) и весь баннер никак не центруется по таблице! Хотя в файле со скриптом нету этой единицы!
Что это такое и как с ним бороться?
Пожалуста помогите разобраться! Простой, хороший и очень нужный скриптик, жаль кидать в топку из-за этой кляксы...
Спасибо заранее отозвавшимся!
s019.radikal.ru/i639/1204/29/5ab06f8acd13.jpg
Здравствуйте! Спасибо за ваше решение! У меня работает скрипт, но вот проблема: после его установки совершенно перестали работать другие скрипты. Например, скроллер и даже выпадающие менюшки не работают на верху. Если вас не затруднит, можете взглянуть, отчего это произошло: shop-non-stop.ru
Теоретически происходит конфликт jQuery-функций этого скрипта с js-библиотеками использующимися в движке Magento.
Данный скрипт работает корректно ТОЛЬКО при НЕЧЁТНОМ количестве картинок, иначе — вместо 4-х крутится две и т.п. Пока въехал где ошибка...И ни на одном сайте такой приписки нету. Проверял работу в Хроме и Сафари.