Простой скрипт плавной смены картинок на 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

  • 11.09.2011 Константин:

    создал сайт в Dreamweaver на ширину 750 высоту 2000 выровнял его по центру через далее добавил на новый слой — ....... и внего поместил скрипт JQuery . В результате на широкоформатных мониторах сайт по центру а слой с анимацией смещен до края влево...

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

    • 12.09.2011 Кирилл:

      Может вам поместить его в отдельный блок из тегов div и уже для них задать расположение либо отностельно остальнгого сайта либо относительно окна браузера.

  • 14.09.2011 Константин:

    уникально — заменяешь div id="rotator" на div align="center" — картинки торчат по центру но тогда не работает слайдшоу...

    Тупик.На css эта проблеа не решается. Может на JavaScript?

    • 21.09.2011 Кирилл:

      Заменять не надо, прпробуйте взамен добавить вокруг div id='rotator'

  • 23.09.2011 Бараклюш:

    Над каментариями посмеялся, особенно над

    4.09.2011 Константин:

    уникально – заменяешь div id=»rotator» на div align=»center» – картинки торчат по центру но тогда не работает слайдшоу…

    Тупик.На css эта проблеа не решается

    Спасибо за скриптик, вставил сразу, выкинул линки, отцентровывается как Кирил и писал) простой и удобный, спасибо. Я как раз искал для шапки на сайт смену изображений скриптик ))

  • 27.09.2011 Blumberg:

    Может кто подскажет, почему «слайдшоу» у меня организовалось подобным образом. Два раза первая картинка, потом пусто, потом начало слайдшоу опять с первой картинки, но уже нормально. Пока решения не увидел. Возможно, со временем как-то смогу исправить, а пока, хочется спросить у друзей по скрипту. Сайтик: www.unon.ru

  • 29.09.2011 Алекс:

    А как сделать так, чтобы менялось не три картинки, а скажем 7?

    • 29.09.2011 Кирилл:

      Если говорить о первоначальном коде примера, то просто надо добавить нужные картинки в html-код на месте списка: <li>еще одна картинка</li>.

      • 29.09.2011 Алекс:

        Да, спасибо. Сам уже разобрался и сделал.

        Однако не могу отцентрировать... хотя и читал пояснение здесь. И как сделать так, чтобы при нажатии в браузере на меняющуюся картинку был бы переход не google, а на саму картинку в папке или, пусть даже,вообще никакого перехода?

  • 29.09.2011 Алекс:

    Спасибо большое! Теги убрал — помогло. Теперь возьмусь за чтение про центрирование.

  • 01.10.2011 Бакс:

    подскажите как поставить его по середине ???? уже по разному пробывал , и прописывал

    и все равно хоть убей в центр не идет

    с боку и все

  • 15.10.2011 Виталий:

    Помогите пожалуйста, хочу на главной страничке сайта http://http://www.innovacia.com.ua применить ваш скрипт, но не получается, я относительно ещё чайник. Какие файлы создавать при создании скрипта, потому что если вставляю его просто то ничего не работает((( (Можно подробно какой файл куда вставлять?)

    • 17.10.2011 Кирилл:

      Кажется уже все вставилось, я бы только подвинул div#rotator левее с помощью, например, 'margin-left: -25px;'.

  • 25.10.2011 Станислас:

    Хороший скрипт. Вот бы еще библиотеку не тянуть с инета а закинуть на хост. Правда подчисть от лишнего не мешало бы.

  • 26.10.2011 Дмитрий:

    Скажите, пожалуйста, а можно ли как-то сделать по бокам картинок — кнопки навигации (вперед и назад)?

    • 26.10.2011 Кирилл:

      Лучше для этой задачи найти другой скрипт.

    • 26.02.2012 Артем:

      можно

      jQuery(function() {

      jQuery('.button_b').click(function() {

      jQuery(«#slider2>ul>li>a»).removeClass(«active»);

      jQuery(this).addClass(«active»);

      var current = (jQuery('#main_slider li.show')? jQuery('#main_slider li.show') : jQuery('#main_slider li:first'));

      // Подключаем эффект растворения/затухания для показа картинок, css-класс show имеет больший z-index

      jQuery(«#idtab_»+jQuery(this).attr(«idtab»)).css({opacity: 0.0}).addClass('show').animate({opacity: 1.0}, 1000);

      // Прячем текущую картинку

      current.animate({opacity: 0.0}, 1000).removeClass('show');

      current_slide= jQuery(this).attr(«idtab»);

      });

      });


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

 css.php