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

  • 27.10.2011 Тимон:

    По поводу выравнивания по центру. Сам долго бился и пришел к такому решению:

    div#rotator {position:relative; left:50%; margin-left: — (половина ширины картинки)px; height:320px;}

    Может кому пригодится;)

    • 05.01.2012 алина:

      Да...я тоже времени потратила...потом случайно обнаружила что картинка просто передвигается курсором!(в Dreamweaver)

  • 28.10.2011 Fedor:

    Доброго времени суток!

    А как перенести этот скрипт в шаблон WordPress?

    • 28.10.2011 Кирилл:

      Берете скрипт и вставляете в один из php-файлов шаблона отвечающего за отображение нужной области: шапки, подвала и т.п.

  • 07.11.2011 Vfr:

    а как указать путь к изображению?

    не допирает

    и есть ли возможность скачать ваш скрипт?

    • 07.11.2011 Кирилл:

      Пути описаны в html части кода, скачать можно просто скопировав его код со страницы, либо найдя источник его загрузки на моей странице, и еще он не мой я просто его «перевел» на русский.

  • 12.11.2011 dmitry:

    спасибо...долго искал подобное!!!очень благодарен

  • 22.11.2011 yuriy:

    У меня такой баг:

    Когда перехожу на другой таб браузера и возвращаюсь обратно на таб с этим плагином, то картинки меняются ОЧЕНЬ быстро. И через некоторое время скорость смены картинок восстанавливается на значение, указанное в скрипте. Как это исправить?

    • 22.11.2011 Кирилл:

      Привет Юрий, этот баг уже описывался ниже и решения я пока не нашел, как и автор скрипта, но вы можете глянуть еще раз по ссылке внизу статьи.

  • 24.11.2011 Саня:

    Привет, хочу поставить такой ротатор на сайте в двух местах, но вообще не получается это сделать. На месте второго появляется первый. Есть решение?

    • 24.11.2011 Кирилл:

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

      • 24.11.2011 Саня:

        Делал разные, проблема в том что первый ротатор становиться на место второго, а второй даже не появляется, наверно что то не так делаю :(

        • 25.11.2011 Кирилл:

          Попробуй у второго блока картинок сделать другое название идентифекатора div-a, например <div id='rotator2'>... и т.д.

  • 03.12.2011 Борис:

    так и не понял, как отцентровать показ картинок

    подскажите, куда тэги div вписать?

  • 08.12.2011 Дмитрий:

    Супер!

    Долго в Интернете рылся, чтобы найти такой код!

    Спасибо огромное!!!

  • 15.01.2012 Макс:

    А если я хочу сделать поверх баннера еще трехпозиционный переключатель? Ну, чтобы в любой момент можно было перейти к конкретной фотографии?

    Его можно сделать тоже в виде списка и переключать прямо в коде вместе с фото.

    Но как к нему прикрепить переход к конкретному фото, чтобы показ продолжался с этого фото?

    • 16.01.2012 Кирилл:

      Если примерно как здесь www.joomlart.com/demo/#te...lart.com/ja_lead, то проще будет найти готовую реализацию под конкретный движок (т.к. довольно распространненный эффект) либо посмотреть как сделано в шаблоне из примера.

  • 20.01.2012 Сергей:

    Доброго всем времени суток!

    У меня проблема такая: установил данный скрипт в шапку сайта cemmarket.com, но добавил еще две картинки (т.е. общее количество 6 меняющихся изображений) во всех браузерах все замечательно работает, но IE тупит — останавливается на второй картинке, а потом вообще изображение пропадает. Помогите!

    • 20.01.2012 Кирилл:

      Первое что приходит из идей — это конфликт jQuery и Prototype фреймворков. Где-то ниже в комментах были ссылки на варианты решения подобных конфликтов для jQuery — можно начать с этого.

      • 20.01.2012 Сергей:

        Кирилл, Вы били правы это конфликт конфликт jQuery и Prototype фреймворков, но для этого мне пришлось удалить скрипт lightbox, может посоветуете однотипный просмоторщик фоток, но чтоб не было конфликтов?


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

 css.php