Иногда в текст текст 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> |
Использован метод: http://www.alohatechsupport.net/webdesignmaui/maui-web-site-design/easy_jquery_auto_image_rotator.html с небольшими уточнениями.
Спасибо, скрипт довольно интересный, мне как ничего не смыслящему в скриптах очень пригодился ))
но возникла одна проблемка, сейчас пытаюсь разместит баннер на сайте но не могу выставить его в нужное место, несмотря на любые параметры position:relative; height:150px; margin-left: 15px; он все время ниже нужного места
вот так получается: arvad.ru/inc/header2.php баннер должен быть справа от названия фирмы...
Заранее благодарен за помощь.
Мой совет будет типичным — ответить на ваш вопрос можно с помощью расширения FireBug установленного в ваш FireFox.
я детально не смотрел, но навскидку я бы удивился, еслиб было не так
сумма ширины всех картинок околок 900пх — такаяже длина у дива видс902
куда там ещо в этой же строке должна картинка уместиться?
поставил диву902 чиширу так чтоб точно хватило 1500 , убрал у дива ротатор маргин левый в 800 пх и тусуеться этот банер справа от картинок в верхнем меню
и это так быстро — благодаря фаербаг, который тебе посоветовали выше...там на ходу сразу меняешь стили или хтмл и смотришь тутже еффект удачи сантехник!
Спасибо за скрипт! Прада пришлось немного попотеть
За то результат этого стоит, можете посмотреть здесь
Да нормально смотрится, я бы только бордер в css убрал, который обычно у картинок-ссылок появляется.
спасибо + за скрипт!
хотелось бы решить два нюанса для достижения идеального результата
1. как сделать так что бы старт был не с первой картинки а произвольной т.е. с разной.
2. как сделать старт с первой картинки с эффектом появления из белого или прозрачного.
Сорри, совсем нет времени покопаться (в т.ч. в комментах на сайте-источнике).
Спасибо за скрипт!Но есть поблема помогите рашить плиз.Локально все нормально работает, но стоит загрузить на сервер и после первой картинки ничего не появляется, т.е. смена вроде происходит, но следующая картинка не появляется...посмотреть можно по этому адрессу skevrostroy.ru/index54321.html это пробная страница, но уже что токо не менял...
Остальные картинки не загружаются по прямому адресу, например skevrostroy.ru/preview/03.jpg, может проблема в этом?
да действительно дело было именно в этом...спасибо!!!навели на мысль)) щас все ок,работает как часы! можете заценить skevrostroy.ru/index.html
Еще раз спасибо за помощь, очень признателен!!!
кирил и антонн...и другая компания... а вы вкурсе что подобные боты для создания еффекта обсуждения гугл уже палит?
рудд, мы не боты, просто не все такие находчивые спасибо кстати за дельные и занятные комменты
Такая проблема: работает на всех страницах, кроме тех, на которых используется галерея Simple Image Gallery 1.2.1 . Увидеть это можно на страницах контакты и оборудование. Есть идеи?)
сайт: print-mks.ru
Похоже на конфликт jQuery с MooTools, попробуйте это решение www.rsdn.ru/article/inet/jQuery.xml#EFDAG (или с оффсайта: docs.jquery.com/Using_jQu..._Other_Libraries).
Что-то не помогло, или я не то сделал?..
Насколько я понял, суть решения в том, чтобы в скрипте jQuery использовать функцию jQuery вместо $, т.е. jQuery.noConflict(); оставляем, а вместо долларов в код слайдера втыкаем jQuery.
Вот спасибо же!!!)
Помогло, все работает)
а как сделать закругленные уголки с помощью средств radius-border для показываемой картинки? Проблема в том, что, добавив в css к классу show radius-border:20px, закругляется только border, а картинка не хочет.
Павел, нашел здесь развернутый ответ на вопрос про скругление картинок с помощью CSS3: www.xiper.net/collect/htm...rder-radius.html.
прекрасный скрипт, но есть одна проблема. даже в том примере, который приведён здесь, перед картинкой существует отступ слева пикселей в 50. подскажите, как убрать отступ
Смотрю в последнем хроме, отступа слева от картинки не вижу, может дело в вашем браузере?
вот смотрите, я выложил на хост и специально закрасил колонки разными цветами, чтобы было видно, что наша картинка вылезает за пределы своей колонки:
slava-arts.ru/index3.html
Ага теперь понял, кажется у меня это решено по-простому — отрицательным левым margin, откуда берется пока не понятно.
Отличная заготовка прекрасно работает. Большое спасибо!
Есть проблема одна, не подскажете, как решить?
Если свернуть окно браузера со страницей где работает слайд-шоу, а потом через некоторое время вернуться к этой странице — то слайды начинают очень быстро сменять друг-друга, потом все восстанавливается. Как будто все это время скрипт был на паузе, а потом начал «догонять».
Как убрать?
Через несколько минут воспроизвелось, фиг знает отчего. Проверяю пока тоже самое на этой странице.
Пока что вижу что и пример в статье «ускоряется» после разворачивания с таскбара только в хроме.
тоже самое, как избавиться от этого эффекта???
Спасибо огромное, очень понятно и просто!))