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

  • 07.12.2010 Максим:

    А у меня появляются две картинки но третья не появляется а просто пустое место но ссылка остаётся на сайт который дан предыдущей,картинке как это исправить?

  • 07.12.2010 Максим:

    Всё я решил эту проблему,но как убрать таблицу вокруг изображения?

    Можно-ли сделать так чтобы картинки менялись в случайном порядке?

  • 07.12.2010 Кирилл:

    Как решили проблему?

    Видимо под таблицей имеется ввиду синий бордер, его можно убрать присвоив тегу img css-стиль: border:none;.

    Чтобы смена картинок происходила в случайном порядке, надо раскомментировать соответствующий кусок кода, добавленный в пример.

  • 07.12.2010 Василий:

    Ура!!! Решил задачу свою с отступами.

    Это оказалось

    * {

    margin: 0;

    padding: 0;

    }

    и во всех обнулось, т.к.

    Класно при этом работает.

    и параметр margin-left: 0px;

    не надо подстраивать

    div#rotator {position:relative; height:180px; margin-left: 0px;}

    Кому интересно может смотреть, починил...

    www.bis22.ru

    • 07.12.2010 Кирилл:

      Да, в эту сторону и нужно было докапывать с FireBug-ом :) .

      Следующий сайт рекомендую делать на Joomla или другом несложном движке.

  • 12.12.2010 Дмитрий:

    Искал простой ротатор, везде все с наворотами. Бльшое спасибо!!!

    С уважением, вебджем.рф!

  • 15.12.2010 MAX:

    А у меня такой вопрос: А как реализовать таких несколько вряд картинок с сменным фоном??? У меня получается так что сначала появляется фото в одной из десяти, потом всё исчезает и появляется только в первом диве((((

    помогите плизззз

    • 15.12.2010 Кирилл:

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

  • 16.12.2010 Svet:

    А Вы можете рассказать как вставить такую штуку в шаблон джумлы, вместо картинки в шапке...

    • 16.12.2010 Кирилл:

      Можно сделать так: все что находится между тегами <style type="text/css"> и </div> в примере исходного кода разместить в нужном месте файла index.php шаблона. Но лучше, думаю, будет создать пользовательский модуль с этим же содержимым и публиковать его в нужном месте шапки.

  • 16.12.2010 Svet:

    оо...чувствую что сложновато для меня...там же ограниченные по площади места для отображения модулей.

    • 16.12.2010 Кирилл:

      Ну если вы скорее работник планетария, чем сайтовод, то вам просто надо будет почитать побольше статей про устройство шаблонов и применение модулей джумлы, либо попросить сделать все фрилансера за пару сотен :) .

  • 16.12.2010 Svet:

    извините за флуд, но правда, я начинающая пока((

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

    • 16.12.2010 Кирилл:

      Нормальный флуд. Если вы про размер модуля, то он в этом случае будет равен размеру картинки. Модуль с пользовательским кодом, не помню как точно называется. Я вообще посоветовал модуль, т.к. это удобнее в плане гибкости (снять/показать), чем вносить изменения в шаблон всего сайта. Кстати на joomlaforum.ru подобные вопросы рассмотрены по нескольку раз :) .

  • 17.12.2010 Ирина:

    У меня тоже проблема как у Максима, только не знаю как решить. «А у меня появляются две картинки но третья не появляется а просто пустое место но ссылка остаётся на сайт который дан предыдущей,картинке как это исправить?». Подскажите пожалуйста.

    • 17.12.2010 Кирилл:

      Есть ссылка на страницу с проблемой?

      Кстати может Максим подписался на комментарии и расскажет? Максим, ты тут?


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

 css.php