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

  • 10.06.2011 Lionzi:

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

    но возникла одна проблемка, сейчас пытаюсь разместит баннер на сайте но не могу выставить его в нужное место, несмотря на любые параметры position:relative; height:150px; margin-left: 15px; он все время ниже нужного места

    вот так получается: arvad.ru/inc/header2.php баннер должен быть справа от названия фирмы...

    Заранее благодарен за помощь.

    • 21.06.2011 Кирилл:

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

    • 31.08.2011 рудд:

      я детально не смотрел, но навскидку я бы удивился, еслиб было не так

      сумма ширины всех картинок околок 900пх — такаяже длина у дива видс902 :)

      куда там ещо в этой же строке должна картинка уместиться?

      поставил диву902 чиширу так чтоб точно хватило 1500 , убрал у дива ротатор маргин левый в 800 пх и тусуеться этот банер справа от картинок в верхнем меню :)

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

  • 21.06.2011 WebMage:

    Спасибо за скрипт! Прада пришлось немного попотеть :)

    За то результат этого стоит, можете посмотреть здесь

    • 22.06.2011 Кирилл:

      Да нормально смотрится, я бы только бордер в css убрал, который обычно у картинок-ссылок появляется.

  • 11.07.2011 Rerol:

    спасибо + за скрипт!

    хотелось бы решить два нюанса для достижения идеального результата

    1. как сделать так что бы старт был не с первой картинки а произвольной т.е. с разной.

    2. как сделать старт с первой картинки с эффектом появления из белого или прозрачного.

    • 19.07.2011 Кирилл:

      Сорри, совсем нет времени покопаться (в т.ч. в комментах на сайте-источнике).

  • 14.07.2011 Антон:

    Спасибо за скрипт!Но есть поблема помогите рашить плиз.Локально все нормально работает, но стоит загрузить на сервер и после первой картинки ничего не появляется, т.е. смена вроде происходит, но следующая картинка не появляется...посмотреть можно по этому адрессу skevrostroy.ru/index54321.html это пробная страница, но уже что токо не менял...

    • 14.07.2011 Кирилл:

      Остальные картинки не загружаются по прямому адресу, например skevrostroy.ru/preview/03.jpg, может проблема в этом?

      • 14.07.2011 Антон:

        да действительно дело было именно в этом...спасибо!!!навели на мысль)) щас все ок,работает как часы! можете заценить skevrostroy.ru/index.html

        Еще раз спасибо за помощь, очень признателен!!!

        • 31.08.2011 рудд:

          кирил и антонн...и другая компания... а вы вкурсе что подобные боты для создания еффекта обсуждения гугл уже палит? :)

          • 31.08.2011 Кирилл:

            рудд, мы не боты, просто не все такие находчивые :) спасибо кстати за дельные и занятные комменты

  • 19.07.2011 Алексей:

    Такая проблема: работает на всех страницах, кроме тех, на которых используется галерея Simple Image Gallery 1.2.1 . Увидеть это можно на страницах контакты и оборудование. Есть идеи?)

    сайт: print-mks.ru

    • 19.07.2011 Кирилл:

      Похоже на конфликт jQuery с MooTools, попробуйте это решение www.rsdn.ru/article/inet/jQuery.xml#EFDAG (или с оффсайта: docs.jquery.com/Using_jQu..._Other_Libraries).

      • 19.07.2011 Алексей:

        Что-то не помогло, или я не то сделал?..

        • 19.07.2011 Кирилл:

          Насколько я понял, суть решения в том, чтобы в скрипте jQuery использовать функцию jQuery вместо $, т.е. jQuery.noConflict(); оставляем, а вместо долларов в код слайдера втыкаем jQuery.

          • 20.07.2011 Алексей:

            Вот спасибо же!!!)

            Помогло, все работает)

  • 19.07.2011 Павел:

    а как сделать закругленные уголки с помощью средств radius-border для показываемой картинки? Проблема в том, что, добавив в css к классу show radius-border:20px, закругляется только border, а картинка не хочет.

  • 10.08.2011 Вячеслав:

    прекрасный скрипт, но есть одна проблема. даже в том примере, который приведён здесь, перед картинкой существует отступ слева пикселей в 50. подскажите, как убрать отступ

    • 11.08.2011 Кирилл:

      Смотрю в последнем хроме, отступа слева от картинки не вижу, может дело в вашем браузере?

      • 11.08.2011 Вячеслав:

        вот смотрите, я выложил на хост и специально закрасил колонки разными цветами, чтобы было видно, что наша картинка вылезает за пределы своей колонки:

        slava-arts.ru/index3.html

        • 12.08.2011 Кирилл:

          Ага теперь понял, кажется у меня это решено по-простому — отрицательным левым margin, откуда берется пока не понятно.

  • 23.08.2011 Mats:

    Отличная заготовка прекрасно работает. Большое спасибо!

  • 26.08.2011 Виктор:

    Есть проблема одна, не подскажете, как решить?

    Если свернуть окно браузера со страницей где работает слайд-шоу, а потом через некоторое время вернуться к этой странице — то слайды начинают очень быстро сменять друг-друга, потом все восстанавливается. Как будто все это время скрипт был на паузе, а потом начал «догонять».

    Как убрать?

    • 26.08.2011 Кирилл:

      Через несколько минут воспроизвелось, фиг знает отчего. Проверяю пока тоже самое на этой странице.

      Пока что вижу что и пример в статье «ускоряется» после разворачивания с таскбара только в хроме.

    • 21.09.2011 Володимир:

      тоже самое, как избавиться от этого эффекта???

  • 07.09.2011 Kristina:

    Спасибо огромное, очень понятно и просто!))


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

 css.php