Иногда в текст текст 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 с небольшими уточнениями.
Эффект перехода не работает в Google Chrome. Просто меняет картинки.
У меня работает в хроме
За скрипт спасибо огромное! Кто-нибудь растолкуйте следующую проблему. Поставил скрипт, когда загрузилась страница, появляется первое изображение, далее проходит время, появляется снова первое изображение, а потом все нормально, тоесть с самого начала, почемуто первое изображение повторяется, что делать?
fancybox на jquery + плюc шире лайтбокса по возможностям
Помогите плиз дурню.у меня сайт на хостинге, я так понял данная функция работает, если имена файлов ...1 ...2 ...3 У меня заливается картинка и в виде ссылки и все разного адреса...как мне залить, чтобы было как у вас 1.jpg 2.jpg
Привет любые могут быть названия картинок, главное их имена правильно в html-коде описать.
А как сделать выравнивание по центру, то есть мне нужно сделать такое в блоке, и что бы было по центру, где нужно тег вставить, а то, что то я не пойму?
Либо попробовать вокруг
<div id="rotator">...</div>
еще один div с text-align: center; либо как-нибудь так www.artlebedev.ru/tools/t...ml/align-center/.Все оказалось проще:)
div#rotator { position:relative; height:313px; /*высота картинки*/ /* margin-left: -19px;*/ width: 500px; /*ширина картинки*/ left: 50%; /*половина ширины*/ margin-left: -250px; /*половина ширины картинки*/
Большое спасибо! Отличный скрипт, когда не хочется связываться с флешем ради простых задач. Нагрузила его в качестве теста на 50 фото — все хорошо.
Было бы интересно, если бы он ещё сам брал фотографии из указанной папки, без прописывания пути к каждой фотографии.
Хм, я бы наверное при острой необходимости формировал html со списком картинок с помощью серверного скрипта на php, тогда jQuery скрипт остается без изменений, хотя говорят файлы можно прочитать и сделать список с ними и с помощью JavaScript. Первый метод мне кажется проще.
Очень полезный и простой скрипт. Единственное, что jQuery тяжеловат, но если он ещё где-то будет использоваться на сайте, то решение на 5 баллов. Просто и красиво. Спасибо!
Доброго времени суток!
Скрипт отличный, все работает, но есть пара ньюансов, в которых мне никак не удается разобраться:
1. Как центрировать картинку в блоке. Из-за наличия этого li она сдвигается вправо. Где именно отрегулировать эту проблему и какими тегами? И чтобы это уж точно работало...
2. Как без пикселей отрегулировать размер блока где стоит картинка (у меня это новости в юкозе), я бы даже сказала, оптимизировать под все размеры мониторов (на одном все отлично, а на другом картинка вылазит за блок и гуляет за его пределами). Просто ужасно, что на маленьком мониторе получается огромный блок и нормальная картинка, а на большом наоборот.
Заранее, спасибо!
Большое спасибо! Классная штука. Есть 1 небольшая проблема: Установил в шапку все меняется, но активны ссылка и описание только на последнюю картинку. Если убрать ссылку с последней картинки то вообще ссылок нет нигде( А мне нужно что бы на каждую картинку отдельная ссылка работала. В чем проблема? заранее спасибо)