Сейчас: 15:14:33   24-го апреля 2024 г.
UsefulScript.ruСкриптыГрафикаСлайд-шоу на jQuery
88
272

Плавная смена изображений на jQuery

Ранее на нашем сайте уже рассматривались скрипты Автоматической смены изображений и подписей к ним и Плавной смены изображений.


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


Так как в результате реализации на обычном JavaScript код получался довольно длинным, то было принято решение воспользоваться библиотекой jQuery. Это позволило получить довольно компактный и универсальный код, работающий во всех браузерах.


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



Картинка 1

Давай вторую    Давай четвертую

Стоп    Продолжить

Как Вы видите, изображения и подписи к ним автоматически меняются с интервалом в пять секунд. При этом изображения и подписи плавно появляются и плавно исчезают. Помимо перечисленного присутствуют кнопки "Стоп" и "Продолжить". При необходимости можно добавить кнопки для перехода к нужному изображению.


Для получения на своем сайте точно такого же эффекта слайд-шоу, вам потребуется подключить библиотеку jQuery следующим образом:

JavaScript код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
</script>

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

HTML код:
<div style="height: 220px; text-align: center;">
<
img src="image/img_1.png" alt="" id="slide_show"><br>
<
span id="slide_text">Картинка 1</span>
</
div>

Если необходимо, то Вы можете добавить кнопки для остановки и продолжения смены изображений, а также кнопки перехода к нужному изображению:

HTML код:
<span style="color: blue; cursor: pointer;" onclick="chgImg(2)">Давай вторую</span>
&
nbsp;&nbsp;&nbsp;
<
span style="color: blue; cursor: pointer;" onclick="chgImg(4)">Давай четвертую</span>
<
br><br>

<
span style="color: blue; cursor: pointer;" onclick="clearInterval(play)">Стоп</span>
&
nbsp;&nbsp;&nbsp;
<
span style="color: blue; cursor: pointer;"
onclick="play=setInterval('chgImg(0)', 5000);">Продолжить</span>

В нижней части сайта разместите JavaScript код, который и будет делать всю работу по плавной смене изображений и подписей к ним, а также осуществлять переход к нужному изображению:

JavaScript код:
<script type="text/javascript">
var 
imgs = ["image/img_1.png","image/img_2.png","image/img_3.png","image/img_4.png"];
var 
text = ['Картинка 1','<a href="index.php">Картинка 2</a>',
            
'<b style="color: red;">Картинка 3</b>','Картинка 4'];
var 
0;
time 800;
play setInterval("chgImg(0)"5000);

function 
chgImg(number) {
if (
number!=0number 2;
 $(
"#slide_show").fadeOut(time, function() {    //для картинок
  
$(this).attr("src"imgs[n]).fadeIn(time);
 });

 $(
"#slide_text").fadeOut(time, function() {    //для текста
  
$(this).html(text[n]).fadeIn(time);
 });

n++;
if (
n>=imgs.length0;
}
</script>

Как видите, код получился действительно небольшим, но в тоже время красиво осуществляет довольно полезную функцию по плавной смене изображений.

Дата создания: 22:37:19 07.11.2012 г.
Посещений: 42364 раз(а).

Комментарии посетителей (71 шт.):
Матвей
-2
# 714
(20:05:02  28.03.2013 г.)

Здравствуйте, очень нравится ваш сайт, но возник такой вопрос:
А можно как то в этом коде изменить сам эффект смены картинки очень хочется пожалуйста?
Ответить

Administrator
0
# 715
(20:10:51  28.03.2013 г.)

К сожалению, у jQuery совсем не богатый набор эффектов анимации, а писать что-то свое накладно, так что придется пока довольствоваться тем, что имеется.
P.S. И написанием скриптов на заказ мы тоже не занимаемся :)
Ответить

Magos
1
# 934
(15:39:04  13.06.2013 г.)

Очень полезная штука. Огромное спасибо. Но вот вопрос: когда страница только загрузилась картинки еще нет (грузится еще) браузер показывает иконку отсутствия картинки (типа стандартная порванная картинка, по крайней мере, в хроме). Возможно ли в скрипте это как-то обойти (может предзагрузкой или перехватом и запретом этого)? Спасибо!
Ответить

Administrator
0
# 935
(16:08:58  13.06.2013 г.)

Если речь идет только о первой картинке (которая появляется при загрузке странички), то лечится легко. Добавьте картинке с id="slide_show" стиль style="display: none;".
А в JavaScript код добавьте $(document).ready(function(){$('#slide_show').fadeIn(600)});
Ответить

Magos
1
# 936
(17:50:05  13.06.2013 г.)

Спасибо большое. Описанная мной проблема решилась, но выскочила другая. Стиль иконку убрал. А вот строка кода в скрипт результата не дает (что с ней, что без нее, может ее не в то место ставлю (куда именно надо?). Зато теперь первая картинка дважды подряд показывается, а потом все нормуль.
Ответить

Administrator
1
# 937
(18:37:02  13.06.2013 г.)

Строчку $(document).ready(function(){$('#slide_show').fadeIn(600)}); внутри JavaScript кода ставим первой строкой (перед var imgs). Эта строчка, сразу после загрузки всей странички показывает первое изображение (которое прописано в img src=""). Картинка показывается дважды из-за того, что она у Вас прописана в img src="" и скорее всего вторая в массиве var imgs.
Ответить

Magos
1
# 938
(19:17:36  13.06.2013 г.)

Великое спасибо! Все работает. Картинка дважды как-то сама прошла, точнее это явление то есть, то все норм, видать кэширование замешано где-то.
Ответить

Денис
0
# 956
(12:16:29  07.07.2013 г.)

Здравствуйте! А как сделать сами изображения ссылками?
Ответить

Administrator
2
# 957
(13:08:42  07.07.2013 г.)

Можно. Для этого HTML код с изображением замените на такой:
<a id="slide_text" href="index.php"><img src="image/img_1.png" alt="" id="slide_show"></a>
В переменную text помещаем ссылки: var text = ["index.php","script.php","trick.php","forum/index.php"];
Ну и меняем обработчик #slide_text на такой:
$('#slide_text').fadeOut(time, function() { $(this).attr({"href":text[n]}).fadeIn(time); });
Ответить

Денис
2
# 958
(15:05:32  07.07.2013 г.)

Спасибо, получилось! А еще такой вопрос, при наведении на баннер курсор не преобразовывается в указатель, как при наведении на ссылку. То есть, нет ощущения, что это ссылка, и баннер куда-то ведет. Можно ли сделать так, чтобы было понятно?
Ответить

Administrator
1
# 959
(16:21:54  07.07.2013 г.)

В Опере и IE показывается нормально. Наверно зависит от стилей на вашем сайте. Для верности добавьте стиль курсора для изображений: <img src="image/img_1.png" alt="" id="slide_show" style="cursor: pointer;">
Ответить

Денис
0
# 963
(01:40:04  12.07.2013 г.)

Здравствуйте! Скажите, а можно ли сделать, что бы только текст плавно сменялся. Мне нужно чтобы всего две фразы крутились. Сделал, но как-то они быстро крутятся.
Ответить

Administrator
1
# 964
(21:54:02  12.07.2013 г.)

Можно. Вот весь код целиком:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
</script>

<span id="slide_text">Картинка 1</span> <!-- вставьте под изображение -->

<script type="text/javascript">
var text = ['Картинка 1','Картинка 2','<b style="color: red;">Картинка 3</b>','Картинка 4'];
var n = 0;
play = setInterval("chgImg()", 5000);

function chgImg() {
$('#slide_text').fadeOut(800, function() { $(this).html(text[n]).fadeIn(800); });
n++;
if (n>=text.length) n = 0;
}
</script>
Ответить

Денис
0
# 965
(23:34:32  12.07.2013 г.)

Работает, но в хроме нужно выставлять не 5000 а 3000, иначе не крутит, но если 3000 - то крутит быстро. В ИЕ вообще резко меняет одну на другую, без намека на плавность.
Ответить

Administrator
0
# 966
(23:42:23  12.07.2013 г.)

Странно. У меня приведенный чуть выше в комментариях код даже в IE8 работает плавно.
play=setInterval("chgImg(0)", 5000); - интервал между сменой картинок и не должен влиять на работоспособность скрипта. 800 - время анимации (угасания, появления).
Ответить

Денис
3
# 978
(14:56:36  18.07.2013 г.)

Доброго времени суток! У меня меню флеш.
Если страница включена в меню, скрипт вывода текста выводит картинку первую, затем начинается вывод букв, по одной за раз. Убираю в меню id="selectedCell" который отвечает за окрашивания пункта меню активной страницы, скрипт работает как надо.
Скажите, в чем может быть проблема такого конфликта?
Ответить

Administrator
0
# 980
(20:56:24  18.07.2013 г.)

Ваш изначальный комментарий перенес на форум - http://usefulscript.ru/forum/showthread.php?tid=225
Здесь оставил сокращенный вариант. Ответил тоже на форуме.
Ответить

Денис
0
# 1026
(09:05:59  07.08.2013 г.)

Доброе утро!
1) А можно ли сделать "плеер" Предыдущая Старт/Стоп Следующая как здесь http://usefulscript.ru/slide_show.php
2) Чтобы картинки в случайном порядке воспроизводились.
3) Массив какой-то записывался, чтобы кнопки предыдущая и следующая запоминали и работали корректно хотя бы на 3-5 позиций вперёд-назад?
Может, много хочу? Сам полез разбираться - чуть программировал когда-то - логику понимаю, а с языком - хромаю, потратил два часа - толку маловато.
Ответить

Administrator
0
# 1032
(20:18:14  09.08.2013 г.)

Сделано. Т.к. код большой, то было решено вынести комментарий в виде отдельной темы на форуме.
Ответить

Денис
0
# 1143
(16:29:38  19.09.2013 г.)

Применил вот этот код на сайте - стало очень красиво, благодарю!

Было бы очень здорово, если бы появилась возможность:
- задавать ссылки с каждого фото;
- задавать надписи к фото плюс ссылки с них (ссылка для фото и надписей - одна, т.е. как бы карточка: фото + надпись, и одна ссылка с них).
Ответить

Administrator
0
# 1145
(21:30:01  19.09.2013 г.)

Немного подредактировал и уменьшил Ваш комментарий и ответ выложил на форуме.
Ответить

Денис
-1
# 1034
(13:15:46  12.08.2013 г.)

Ребята, очень благодарю! Сам бы я долго телепался. И решение у вас получилось более простое и красивое (чем "массивы"). Благодарю!

Подписи к картинкам - вообще планировал. Но пока потестирую и без них (и так помогли сильно). Плюс попробую сделать по аналогии с сообщением выше "А как сделать сами изображения ссылками?"
Ответить

Дмитрий
0
# 1123
(20:18:54  14.09.2013 г.)

Еще раз здравствуйте. Спасибо за решение моего вопроса (комментарий №1120 от Дмитрия). Но, возник еще раз подобный вопрос, только чтобы эффект был с плавностью на основе этого скрипта на jQuery.
Принцип реализации такой же, как в первом вопросе. У меня на страницу три строки и три столбца изображений. Хотелось бы, чтобы каждая ячейка отображала свои картинки с разным интервалом времени. Как это можно организовать?
Ответить

Administrator
0
# 1124
(21:30:07  14.09.2013 г.)

В связи с относительно объемным кодом получившегося скрипта, ответ сделал в виде отдельной темы на нашем форуме - Несколько слайд-шоу с плавной сменой изображений на jQuery.
Ответить

Дмитрий
0
# 1133
(13:52:26  15.09.2013 г.)

Установил Ваш вариант скрипта. Все работает. Но, проблема другая появилась. У меня есть фотогалерея, которая открывает фотки через скрипт lightbox. Так вот, если подключаю библиотеку и весь сценарий для прокрутки плавных появлений и исчезаний, то перестает работать lighbox, убираю скрипты прокрутки lightbox - начинает работать. Какой-то конфликт в сценариях идет. Не могу разобраться.
Ответить

Administrator
0
# 1134
(14:01:35  15.09.2013 г.)

Скорее всего, конфликт с jQuery. Попробуйте использовать jQuery.noConflict();, подробнее.
P.S. Для конкретно вашего случая ответил в той же теме на форуме.
Ответить

Евгений
0
# 1178
(07:50:13  04.10.2013 г.)

Добрый день. Спасибо за код. Подскажите, а как установить время задержки показа, скажем, пятой картинки дольше чем у других?
Ответить

Administrator
2
# 1179
(20:21:37  04.10.2013 г.)

Сделано. Чтобы не впихивать весь получившийся код в комментарий, ответил Вам на нашем форуме в теме Слайд-шоу с разным временем показа изображений.
Ответить

Владимир
2
# 1210
(21:20:14  15.10.2013 г.)

Здравствуйте, такая проблема: появляется первое изображение, затем исчезает, затем опять первое изображение кратковременно мигает и появляется второе. Затем такая же история с остальными изображениями. После первого круга смены картинок все работает отлично, но спотыкающиеся изображения пока чистый кэш не впечатляет. Можно ли как-то исправить эту проблему?
Ответить

Administrator
1
# 1211
(22:13:45  15.10.2013 г.)

Мигание изображений может быть связано с тем, что скрипт начинает свою работу, когда еще не вся страничка загружена. Для того чтобы этого избежать, поместите JavaScript код установки интервала времени внутрь $(document).ready(function(){ ... });
В результате у Вас должно получиться следующее:
$(document).ready(function(){ play = setInterval("chgImg(0)", 5000); });

А первое изображение показывается дважды, т.к. сначала оно прописано в теге img, а второй раз - уже берется из массива. Просто пропишите в тег img последнее изображение массива.
Ответить

Вадим
0
# 1510
(11:30:55  05.03.2014 г.)

А как добиться того, чтобы при смене картинок не показывалось пустое место, а одна картинка как бы накладывалась на другую.
Ответить

Administrator
0
# 1512
(22:12:58  05.03.2014 г.)

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

Олег
0
# 1564
(17:49:19  01.04.2014 г.)

Разжуйте, пожалуйста, куда конкретно вставлять коды.
1-й в head, 2-й в body, 3-й перед /body (это низ сайта?), а то тыкаю их по-разному, и ничего не выходит, появляются кнопки, а изображений нет, соответственно эффектов тоже. IE не грузит, то есть показывает что идет загрузка и на этом все. Лис что-то очень быстро прогружает, появляются кнопки и далее все без движений.
Ответить

Administrator
0
# 1566
(20:16:35  01.04.2014 г.)

Все четыре кода желательно вставить в той очередности, в которой они приведены в данной теме и не обязательно внутри head и body. Также проверьте правильность указания пути к изображениям.
Ответить

Игорь
0
# 1641
(23:38:54  04.05.2014 г.)

Здравствуйте, очень нравится ваш сайт и у меня вопрос: возможно ли дополнить ещё плавным переходом, я новичок в js.
Ответить

Administrator
0
# 1646
(22:47:42  06.05.2014 г.)

Попробуйте воспользоваться скриптом из темы Слайд-шоу с плавным переходом изображений.
Ответить

Gekson
0
# 1742
(16:17:36  18.06.2014 г.)

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

Administrator
0
# 1743
(19:49:04  18.06.2014 г.)

Конечно имеется, и в комментарии # 1124 о таком скрипте упоминается. На всякий случай повторю ссылку на наш форум - Несколько слайдшоу с плавной сменой изображений на jQuery.
Ответить

Кира
0
# 1828
(14:38:42  26.08.2014 г.)

Добрый день! Возникла такая проблема: меняющиеся картинки все время при их смене дергают страницу вверх, центрируя изображение.
Ответить

Administrator
0
# 1831
(20:32:56  26.08.2014 г.)

Задайте родительскому блоку DIV постоянную высоту: <div style="height: 220px;">
Ответить

Dian
0
# 1901
(00:24:23  23.09.2014 г.)

Здравствуйте! Как сделать так, чтобы анимация начиналась с нажатия кнопки старт?
Ответить

Administrator
0
# 1902
(11:37:27  23.09.2014 г.)

Легко. Удалите из JavaScript кода строчку: play=setInterval("chgImg(0)", 5000);
Добавьте кнопку: <input type="button" onclick="play=setInterval('chgImg(0)', 3000);" value="Старт">
Ответить

Dian
0
# 1916
(22:06:46  26.09.2014 г.)

А как остановить эту анимацию, например через две секунды?
Ответить

Administrator
0
# 1917
(22:45:32  26.09.2014 г.)

Например, так: setTimeout("clearInterval(play)", 6000);
Ответить

Татьяна
0
# 2301
(01:15:32  05.03.2015 г.)

Поставила код, на html все работает отлично, а в джумле только на главной меняются картинки, а на других страницах появляется первая картинка и потом пустое место, в чем может быть проблема?
Ответить

Administrator
2
# 2303
(21:18:27  05.03.2015 г.)

Попробуйте в JavaScript коде указать полный путь к изображениям.
Ответить

Артём
0
# 2401
(00:31:21  19.04.2015 г.)

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

Administrator
0
# 2403
(12:11:36  19.04.2015 г.)

Возможно. Для подсчета количества нажатий можно воспользоваться jQuery методом data(). Другой вопрос, зачем это надо, если можно просто сделать отдельную ссылку для перехода.
Ответить

Артём
0
# 2405
(23:18:26  19.04.2015 г.)

А ещё такой вопрос, как сделать так, что бы слайд-шоу начиналось только после загрузки всех картинок из массива в кеш браузера, так как получается, что при нажатии кнопки "следующая", идёт промаргивание той, на которой находишься, она так и остаётся, пока следующая полностью не загрузилась, в итоге смена идёт рывками. Либо хотя, чтобы пользователь видел ход загрузки следующей. Заранее спасибо.
Ответить

Administrator
0
# 2406
(23:40:56  19.04.2015 г.)

Тут уже нужно переделывать скрипт под конкретные задачи. Например, если будет предусмотрена только одна кнопка - "следующая", то можно незаметно подгружать следующее изображение, пока показывается текущее. Либо можно пойти по простому пути. Прописать все изображения и сделать их невидимыми и размером 1х1 пиксель. А весь JavaScript код поместить внутрь $(document).ready(function(){ ... });
Ответить

Дмитрий
0
# 2474
(17:12:25  11.05.2015 г.)

Сделал по Вашему, картинки стали ссылками, но как сохранить и текст-ссылку под картинкой?
Ответить

Administrator
0
# 2475
(18:45:43  11.05.2015 г.)

Готовый скрипт выложил на нашем форуме.
Ответить

Сергей
0
# 2764
(14:12:51  12.10.2015 г.)

Подскажите, как поместить картинки в центр? А то у меня открывает на левой стороне.
Ответить

Administrator
0
# 2765
(14:20:25  12.10.2015 г.)

Поместите картинку внутрь блока <div style="text-align: center;"></div>
Ответить

Borys
0
# 3188
(11:37:27  28.04.2016 г.)

А что нужно из примера кода оставить, чтобы была плавная смена изображений при наведении курсора?
Ответить

Роман
0
# 3331
(01:47:57  15.07.2016 г.)

Как увеличить кол-во картинок до 6-8 штук. Заранее спасибо.
Ответить

Administrator
0
# 3333
(18:51:42  15.07.2016 г.)

Просто увеличьте количество элементов в массивах imgs и text.
Ответить

April
0
# 3339
(07:55:33  20.07.2016 г.)

А как сделать слайдер для фона?
Ответить

Виктор
0
# 3384
(15:23:19  25.08.2016 г.)

Добрый день. Проблемка небольшая. При выводе вместо русских букв показываются ?????. В чем может быть дело?
Ответить

Administrator
0
# 3385
(17:25:59  25.08.2016 г.)

Проблема скорее всего в неправильной кодировке файла со скриптом, содержащим русские буквы.
Ответить

Виктор
0
# 3386
(20:56:31  25.08.2016 г.)

Да, разобрался. Не нужно было созданный JS переделывать в utf-8, а оставить как есть.
Ответить

Виктор
0
# 3388
(15:44:18  26.08.2016 г.)

Есть еще вопрос по обновлению скрипта. Не пойму, отображение текста не предусмотрено?
Я имел ввиду надпись под картинкой можно выводить так же, как и в одиночном скрипте смены изображений.
Ответить

Administrator
0
# 3391
(00:35:01  27.08.2016 г.)

А так понимаю, Вы говорите про скрипт по ссылке из комментария # 1124.
Выложил на форуме еще один вариант данного скрипта, но уже с текстом.
Ответить

Виктор
0
# 3392
(01:28:43  27.08.2016 г.)

То что нужно, сам не мог догнать что нужно добавить в JS для отображения текста под картинкой. Спасибо. Правда показ по вертикали идет, пришлось табличку добавлять для показа по горизонтали, т.к. у меня пять штук подряд предусмотрено, и класс к ней под свой дизайн.
Ответить

Роман
0
# 3787
(15:56:19  11.03.2017 г.)

А можно картинки сделать резиновыми, для адаптации?
Ответить

Даниил
0
# 3906
(01:11:25  19.05.2017 г.)

Скорее всего глупый вопрос, но толи не увидел в предыдущих комментах, то ли что:
Как сделать, чтобы кнопки "следующая картинка" "предыдущая". У вас в коде показать 2 или 4. А как изменить его на -1 или +1 по клику... не дотункал.
Подскажите?
Ответить

Administrator
0
# 3907
(22:50:20  19.05.2017 г.)

В сообщении # 1032 я уже давал ссылку на форум с подобным кодом.
Ответить

Руслан
0
# 3957
(13:12:40  19.06.2017 г.)

Здравствуйте, у меня отображаются кнопки, но нет картинок. Путь указан правильно, так как когда использую img всё красиво выводится.
Ответить

Владимир
0
# 4262
(20:30:56  15.03.2018 г.)

Доброго времени суток. У меня такой вопрос: как эту функцию обернуть в
jQuery (document).ready(function($){ }); либо как из jQuery (document).ready(function($){ }); обратиться конкретно к var img? Цель: использовать .each и .push
Ответить

Ярослав Ч
0
# 4873
(12:00:40  13.12.2021 г.)

Спасибо очень круто! Только я не могу на картинки добавить ссылки для перехода с картиной на другие странички. Подскажите как это реализовать. Спасибо.
Ответить

Administrator
0
# 4875
(20:08:28  13.12.2021 г.)

В комментариях уже есть решение вашего вопроса - ссылка
Ответить

Закрыть
Ваше имя:
539 + 5 =
Добавить комментарий:
Ваше имя:
539 + 5 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 5

Как Вы узнали о нашем сайте?