Иногда в текст текст 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 с небольшими уточнениями.
картинка отступает от края какая часть кода отвечает за размещения картинки на сайте?
Виталий, лучше всего вам на этот вопрос ответит FireBug.
Можно ли реализовать 3 контейнера с меняющимися картинками на одной странице?
Где-то в комментариях кажется уже был подобный вопрос, и решение вроде бы тоже нашлось.
Реализовал несколько блоков по примеру который был описан ранее. Картинки меняются нормально только ссылки не меняются, а постоянно одна и та же, которая принадлежит последнему элементу списка. А мне очень важно чтобы и ссылки менялись тоже. Подскажите как правильно сие сделать?
хорошо с отступами я разобрался, а если например у меня картинки которые меняются задуманы по всей ширине как их оставить на полную ширину при разном разрешении экран?
Картинки в любом случае растягиваться не будут. Только если добавлять скрипты для их динамичного масштабирования, но это уже совсем другая истоия и весьма трудоемкая.
Ребят подскажите как всё таки применить данный скрипт на одной странице с двумя разными блоками меняющихся картинок? Как не побывал менять код — работает один из двух блоков
Спасибо автору, спасибо Никитосу!!
Весьма удачный и полезный скриптец!!!
Скрипт понравился. А как сделать так, чтобы скрипт работал только на главной странице сайта и не появлялся на других?
Проще всего просто загружать его только на главной странице, как это сделать зависит от того как сделан ваш сайт. Наверное можно внутри скрипта анализировать url, но это уже посложнее.
Мой сайт www.arrixaca.ru На месте неподвижной картинки работал скрипт.
Скрипт сейчас исключен из index.php
Когда вставляю код, скрипт работает на всех страницах, что мне совсем не нужно.
Спасибо за ответ.
Если речь о картинке в шапке сайта, то варианта на вскидку такой — используя одно из условий публикации модулей, а именно условие на главную страницу isFrontPage либо загружать скрипт либо нет.
Извиняюсь, сразу не уточнил. Речь не о шапке. Большая картинка в теле с пластиковыми банками Arrixaca.
Тут привязки к модулю нет. С шапкой я потом поэксперементирую. Скрипт , я понимаю, куда воткнеш в indexe, там он и работает. Вправо-влево подвинуть просто, а на то что есть на странице он не обращает внимания. Мне нужно ему дать условие, типа работать только на главной, привязать его как то.
Если необходимо чтобы скрипт работал только там где нужно вставьте его в пользовательский модуль (при отключенном визуальном редакторе) и опубликуйте модуль на нужной позиции и на нужных страницах.
Доброе время суток. после установки скрипта, картинки в столбик находятся, хотя появляются и затухают. Подскажите как можно добиться того, чтоб они в столбик не стояли?
Посмотрите с помощью FireBug в FireFox какие css-стили ставят картинки в столбик.
Думаю надо проверить css-стили для тегов li и подобных, возможно стили сайта выставляют картинки в столбец.