Простой скрипт плавной смены картинок на JQuery

Иногда в текст текст 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>
Пример работы:

  • pic1
  • pic2
  • pic3

 

Использован метод: http://www.alohatechsupport.net/webdesignmaui/maui-web-site-design/easy_jquery_auto_image_rotator.html с небольшими уточнениями.

Комментариев: 292

  • 18.02.2012 ксения:

    Доброе время суток!

    ставлю на сайт ucoz и отображается только 1 картинка и ничего не происходит. Подскажите как мне это исправить??? заранее спасибо

    • 19.02.2012 Кирилл:

      Привет, Ксения, теоретически может быть что скрипт не дружит с ucos по какой-то причине, например, возможен конфликт с «родными» скриптами укоза. Попробуйте спросить службу поддержки самого ucoz-а на тему «почему этот скрипт может не работать». Вдруг у них будут полезные идеи.

      • 19.02.2012 Женя:

        Кирилл, а как на счет моей проблемы со ссылками?

        • 20.02.2012 Кирилл:

          Думаю стоит перепроверить исходный код страницы, а именно, наличие тегов ссылок вокруг всех картинок.

          • 20.02.2012 Женя:

            Кирилл, теги ссылок есть везде кроме последней картинки. Я ее специально убрал так как работала только она (на всех картинках). А вот title прописан везде, и на всех картинках показывается только с последней картинки. Получается что активна всегда только последняя картинка.

        • 20.02.2012 Кирилл:

          div#rotator ul li.show {z-index:500;} — похоже, не хватает в вашем css.

          • 20.02.2012 Женя:

            Спасибо!!! Помогло. Огромное спасибо!!!!!!!!!

    • 28.02.2012 Максим:

      Можно сделать совместимым с другими фреймворками код так:

      jQuery(function($){ //здесь весь код });

      А вообще ставьте себе мозиллу и фаербаг.

  • 21.02.2012 Vladi:

    помогите не отображается в центре страницы это слайд шоу

    какую часть кода нужно изменить, чтобы в любом браузере слаайдшоу было в центре???

    Помогите пожалуйста

    Жду ответа заранее благодарен

  • 27.02.2012 Sonic:

    Если не трудно, помогите разобраться со сменой картинок в нескольких местах. Способ предложенный nikitos_one неработает, Dremw вообще в строке «$('div.rotator:eq('+i+') ul li').css({opacity: 0.0}); $('div.rotator:eq('+i+') ul» видит ошибку, в конечном итоге ничего неработает.

    С вариантом смены одной картинки всё понятно и работает, спасибо большое, а вот как быть со сменой в нескольких местах...

  • 02.03.2012 Lutini:

    А как сделать, чтобы когда обновляешь страницу, картинка была рандомной, а не одной и тойже?

    • 02.03.2012 Lutini:

      Так, рандомность я сделал, скачав ротатор, но проблема в том, что у меня картинки ведут в категории и приходится ждать, когда пройдет пройдет 1-я картинка. Вообще возможно ли убрать из кода «первую картину», чтобы постоянная рандомность была.

  • 05.03.2012 Oleg:

    Спасибо, скрипт хорошо работает, но как сделать две таких рамки? Изменение селекторов не помогло :(

  • 10.03.2012 Olya:

    Такой же вопрос, как сделать чтобы отображалось 3 таких рамки, и чтобы они использовали одни и те же картинки.

  • 14.04.2012 Петр:

    Зравствуйте!

    Огромная благодарность автору за простой и практичный скриптик. Сегодня пол дня пролазил по просторам инета в поиске такой вещи.

    Все фунциклирует у меня (что касается баннера), но вот, почему-то (сверху него у меня стоит блок с выпадающим меню) закрывает выпадающее меню.

    Не вкурсе как указать что на первом плане должно показывать меню а баннер — снизу?

    • 14.04.2012 Петр:

      Извиняюсь... Нашел уже решение. Просто покопался в стиле самого блока меню.

  • 15.04.2012 Петр:

    Что не одно — то другое...

    Никак не могу найти решение следующей проблемы!

    При установке баннера на сранице, подставляется откудо-то «1» слева (между тэгами *** 1 ) и весь баннер никак не центруется по таблице! Хотя в файле со скриптом нету этой единицы!

    Что это такое и как с ним бороться?

    Пожалуста помогите разобраться! Простой, хороший и очень нужный скриптик, жаль кидать в топку из-за этой кляксы...

    Спасибо заранее отозвавшимся!

  • 23.04.2012 Дмитрий Фю:

    Здравствуйте! Спасибо за ваше решение! У меня работает скрипт, но вот проблема: после его установки совершенно перестали работать другие скрипты. Например, скроллер и даже выпадающие менюшки не работают на верху. Если вас не затруднит, можете взглянуть, отчего это произошло: shop-non-stop.ru

    • 27.04.2012 Кирилл:

      Теоретически происходит конфликт jQuery-функций этого скрипта с js-библиотеками использующимися в движке Magento.

  • 26.04.2012 Макс:

    Данный скрипт работает корректно ТОЛЬКО при НЕЧЁТНОМ количестве картинок, иначе — вместо 4-х крутится две и т.п. Пока въехал где ошибка...И ни на одном сайте такой приписки нету. Проверял работу в Хроме и Сафари.


Добавление комментария:

 css.php