Слайдшоу картинок на jQuery

Слайдшоу картинок на jQuery

Сегодня мы попытаемся написать небольшую галерею картинок, картинки в которой будут автоматически меняться. Я поставил перед собой задачу, написать слайдшоу, чтобы затем сделать модуль для CMS с панелью управления. С возможностью вставлять на страницу несколько таких блоков. И так приступим.

Создаем index.html и подключаем jQuery

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Слайдшоу</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script src="jquery-1.3.2.min.js" type="text/javascript" ></script>
<script type="text/javascript">
// тут будет функция смены картинок
</script>
</head>
<body>
<!-- Выводим первый кадр слайдшоу -->
<div id='animate'><img border='0' src="1.jpg" /></div>
</body>
</html>

Для того, чтобы реализовать слайдшоу, нам необходимо сделать задержку после появления картинки, затем заменить её на другую. Используем функцию fadeTo, которая либо скрывает объект, либо отображает. У функции есть три параметра:

1 – параметр: скорость отображения, в миллисекундах иди slownormal, fast.

2 – параметр: степень прозрачности, т.е. до какого значения будет изменяться прозрачность.

3 – параметр: вызов функции.

Алгоритм такой, как только загружается страница, мы вставляем функцию fadeTo с прозрачностью 1, для того чтобы создать задержку. Затем запускаем функцию скрывания. Пока картинка скрыта, мы подменяем картинку на новую. После чего показываем картинку и запускаем в рекрусию данный алгоритм. Все повторяется заново, но с новыми значениями картинки и счетчика.

Приступаем к реализации.

<script type="text/javascript">

var animate = new Array('<img src="1.jpg" />','<img src="2.jpg" />','<img src="3.jpg" />','<img src="4.jpg" />'); // Вставляем картинки в массив

//функция reimg(идентификатор, кол-во картинок, счетчик, время ожидания, время затухания, время появления)

function reimg (id, colimg, count, timeload, timehide, timeshow)

{

$("#"+id).fadeTo(timeload,1, function(){ //Время ожидания

$("#"+id).fadeTo(timehide,0, function(){ //Время затухания

count++;

if (count == colimg){

count=0;

}

$("#"+id).html(animate[count]);

$("#"+id).fadeTo(timeshow,1, function(){ //Время появления

reimg(id, colimg, count, timeload, timehide, timeshow);

});

});

});

}

$(window).load(function(){

reimg('animate',4,0,1000,100,100);

});

</script>

Таких слайдшоу можно сколько угодно вставить на одну страницу. Добавятся лишь следующие параметры.

Массив с изображениями:

var animate2 = new Array('<img src="1.jpg" />','<img src="2.jpg" />');

Вызов функции после загрузки страницы:

reimg('animate2',2,0,1000,500,500);

Вывод изображения на страницу:

<div id='animate2'><img border='0' src="1.jpg" /></div>

Вот и все, как всегда ничего сложного. После тестирования, мы замечаем, что иногда новая картинка не успевает подгрузиться перед своим появлением. Решение у этой проблемы следующее. Мы вставляем в блок все используемые изображения, прописываем в стилях visibility: hidden; и «запихиваем» куда ни будь подальше, чтобы не мешался.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Слайдшоу</title>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<script src="jquery-1.3.2.min.js" type="text/javascript" ></script>

<script>

var animate = new Array('<img src="1.jpg" />','<img src="2.jpg" />','<img src="3.jpg" />','<img src="4.jpg" />');

var animate2 = new Array('<img src="1.jpg" />','<img src="2.jpg" />');

function reimg (id, colimg, count, timeload, timehide, timeshow)

{

$("#"+id).fadeTo(timeload,1, function(){ //Время ожидания

$("#"+id).fadeTo(timehide,0, function(){ //Время затухания

count++;

if (count == colimg){

count=0;

}

$("#"+id).html(animate[count]);

$("#"+id).fadeTo(timeshow,1, function(){ //Время появления

reimg(id, colimg, count, timeload, timehide, timeshow);

});

});

});

}

$(window).load(function(){

reimg('animate',4,0,1000,100,100);

reimg('animate2',2,0,1000,500,500);

});

</script>

</head >

<body >

<div style='width:1px; height:1px; overflow:hidden; left:-100px; visibility: hidden;' id='loadimg'> <img src="1.jpg" /> <img src="2.jpg" /> <img src="3.jpg" /> <img src="4.jpg" /></div>

<div id='animate'><img border='0' src="1.jpg" /></div>

<div id='animate2'><img border='0' src="1.jpg" /></div>

</body>

</html>
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *