Плавная смена картинок на jQuery

Как изменить src тега img с помощью jQuery? Как сделать плавный переход между картинками на jQuery? Да, и вообще, как добавлять свои элементы в уже готовую структуру страницы?

На этот и, возможно, другие вопросы Вам поможет, я надеюсь, моя мини-галерея, основанная на fadeIn и fadeOut переходе.  Как всегда, всё бесплатно с пояснениями по функциям и переменным.

Итак, нам понадобится всего ничего: jQuery и мой мини-плагин FadeIt. Скачать jQuery можно с официального сайта, а плагин ctepeo - Сигнал (276) с этого блога :) Теперь немного о переменных и работе скрипта.

В архиве мы имеем 4 картинки (2 нормальные и 2 уменьшенные их копии), 1 css файл (для красоты :) ), 1 html файл и 1 javascript файл (jQuery.FadeIt), надеюсь, jQuery у Вас уже есть ;) . В коде html и FadeIt есть комментарии для более доступного понятия «по шагам», но, если рассматривать скрипт в общем, он в указанный блок добавляет 2 блока (увеличенная картинка и блок для превью) (функция fadeItInit()), далее с вызовом каждой fadeItAdd добавляет в превью картинки, после чего ждёт нажатия на картинки и плавно меняет src увеличенного изображения и указывает в блоке превью выбранную картинку.

Функции:

fadeIt() – создает в указанный блок 2 блока для дальнейших махинаций

fadeItAdd(path, path2thumb, main) – Добавляет картинку. path – путь к увеличенной картинке, path2thumb – к уменьшенной, main – если 1, то эта картинка будет сразу в блоке для увеличения.

Далее идёт обработчик нажатия на превью. Хочется пояснить непосредственно что представляет из себя плавная смена картинок:

$(«#fadeItFullImg»).fadeOut(«fast», function(){
$(«#fadeItFullImg»).attr(«src», xe);
$(«#fadeItFullImg»).fadeIn(«slow»);
});

Сперва увеличенная картинка быстро (fast) растворяется, после растворения (callback функция), происходит смена аттрибута картинки src, то есть непосредственно путь к картинке, после этого сразу начинается процесс медленного (slow) отображения картинки.

Думаю, это будет достаточно простой и удобный пример для тех, кто желает разобраться в смене картинок на jQuery и callback функциях. В любом случае Вы можете задать вопрос в комментах. Хорошего Вам дня!

Скачать скрипт можно вот тут: ctepeo - Сигнал (276)

Демо FadeIt: jquery fadeout fadein

Комментарии (12) »


  RSS комментариев этой записи.


Просто подписка на комментарии

  1. Здравствуйте!
    Как в jQuery сделать так, чтоб открывалась картинка и по прошествии 10 секунд плавно перетекала в следующую, и в следующую, а потом в исходную и так далее в цикле?..
    т.е.
    при открытии странички отображается картинка 1
    плавно переходит в картинку 2
    плавно переходит в картинку 3
    плавно переходит в картинку 1

    Comment от Lacis W — 01.05.2009 @ 15:38

  2. Lacis W, в jQuery, насколько мне известно, нету функции wait(), о ней Вы можете погуглить(если кратко, то JavaScript’овская setInterval.

    Если я не ошибаюсь, то Ваш скрипт должен выглядеть как отображение img1, setInterval(), fadeIt, расчёт следующей картинки для показа.

    Если у Вас возникнут проблемы при реализации данного алгоритма или будут более здравые идеи – пишите, с радостью захочу помочь.

    Comment от ctepeo — 02.05.2009 @ 00:37

  3. ctepeo пасиб, реализовал идею.

    Comment от Lacis W — 02.05.2009 @ 01:43

  4. Здравствуйте
    а можно ли реализовать так, чтоб картинки менял=ись в фоне?

    т.е. есть див – в нем меняется фоновый рисунок каждые 5 секунд.. так вот хотелось бы плавно…

    спасибо

    Comment от Иван — 09.09.2009 @ 12:22

  5. Иван, да, можно, но немного другим способом:

    1) Если над блоком есть текст или любой другой контент: нужно положить див в див

    text text text

    и делать для $(«#myBlockToHide»).animate({opacity:0},1000,»linear»,function(){
    $(«#myBlockToHide»).css(«backgroundImage»,»/img/second_bg.jpg»);
    $(«#myBlockToHide»).animate({opacity:1},1000);
    });

    то есть скрываем весь блок за 1 секунду(1000мс), меняем ему фон, и опять отображаем за 1 секунду.

    2) Если сверху нету текста/контента, то повторяем то же самое, что и в пункте 1, только не вкладывая див в див.

    Стоит отметить, что для IE opacity работать не будет, поэтому нужно будет применять следующий css:

    «filer:alpha»:»(opacity:100)» (100- не прозрачный вовсе, 0- полная прозрачность).

    Для организации действий через каждые n секунд, лучше почитать про setInterval(). Судя по всему этот вопрос (интервалы) интересен, напишу скоро статью на эту тему.

    Если у Вас есть ещё какие-либо вопросы, пишите, буду рад помочь

    Comment от ctepeo — 09.09.2009 @ 14:33

  6. Сtepeo помоги плиз, я хочу поставить твой скрипт себе на сайт. Смысл есть 5 меню сайта, под каждое меню своя шапка0картинка, я хочучтоб при нажатии кнопки мои шапки картинки менялись так. вот сайт пока в разработке может по коду подскаже как http://www.deltafly.ru/deltafly.ru/index.html
    спасибо жду овтета

    Comment от Арсен — 10.10.2009 @ 15:20

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

    // Начинаем составлять структуру
    fadeIt();
    // Наполняем картинками
    fadeItAdd(‘images/1_01.jpg’, ‘learntofly.html’,1);
    fadeItAdd(‘images/school.jpg’, ‘learntofly.html’,0);

    Comment от Арсен — 10.10.2009 @ 15:48

  8. Я новичок в js. У меня возник вопрос. Подскажите как адреса маленьких и больших картинок подставлять из БД?

    Comment от gvik — 28.10.2009 @ 11:17

  9. $sql=»SELECT * FROM `твоя таблица` «;
    $result=mysql_query($sql);
    $num_results=mysql_num_rows($result);

    там будеш из масива пхпником выризать …

    П,С. у меня когдато было так

    Comment от xxx — 26.11.2009 @ 20:25

  10. Подскажите, а кроме значений «slow» и «fast» есть цифровые значения изменения скорости? Это для более тонкой настройки.

    Comment от Надежда — 16.03.2010 @ 18:35

  11. Да, если указывать вместо предустановленных значений «slow»/»fast» цифровые, то можно более точно подобрать необходимое время анимации.

    1000 = 1 секунда, то есть строчка
    $(«#myID»).animate({background-color:»red»},1200);

    сменит фон у элемента с id=»myID» за 1,2 секунды

    Так же можно использовать easing для того, чтобы эффект проходил не линейно.

    Comment от ctepeo — 16.03.2010 @ 18:53

  12. Здравствуйте! Как сделать так, чтобы вместо уменьшенных картинок былии пункты меню?

    Comment от александр — 27.05.2010 @ 18:06

Оставить комментарий


Сделано ctepeo на базе wordpress