Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Быстрый слайдер с подгрузкой изображений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: простая реалиазация, возможно будет полезна.
Zuldek
Отправлено: 01 Июля, 2013 - 16:57:18
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Типичная проблема:
В простом и традиционном варианте слайдеры и иные галереи обычно подгружают демонстрируемые картинки при загрузке страницы, визуализируя конструкции примерно такого вида:
CODE (html):
скопировать код в буфер обмена
  1. <ul id="slider">
  2.   <li><img src="/img/slide1.png"/ alt="">
  3.   <li><img src="/img/slide2.png"/ alt="">
  4. ...

Однако, довольно часто требуется показать в одном слайдере множество изображений или несколько (например 15) подобных слайдеров на одной странице, к примеру, странице товаров или рубрики объявлений с галереями фотографий-превьюшек.
Использовать для этих целей подобный подход с изначальным выводом всех картинок в html нельзя (иначе пользователю разом будут подгружаться десятки фотографий что отразится на времени загрузки страницы)
Часть слайдеров (в основном платные) имеют встроенный функционал для "ленивой загрузки" картинок. Для других пользователи часто пытаются изобретать велосипеды, связывая слайдеры с плагинами а ля Jquery Lazy Load.
Некоторые вообще пытаются для данной задачи задействовать ajax (именно для подгрузки картинок, что, для большинства задач, просто не требуется).
При этом коммерческие слайдеры со встроенным функционалам для данной задачи просто неприлично "тяжелые" благодаря своим сложным эффектам и куче настроек.

Между тем, решение задачи сводится к записи урлов картинок в массив js, и встраиванию его элементов в html-код, визуализируемый слайдером.
Предлагаю легкое и производительное (20 слайдеров на страницу с указанной рукописной обвязкой работают как часы) решение, основанное на легком, общеизвестном плагине jquery cyrcle:

CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready( function() {
  2. // массив изображений
  3. var slides = [
  4. '<img alt="" src="/img/slide1.jpg" />',
  5. '<img alt="" src="/img/slide2.jpg" />',
  6. '<img alt="" src="/img/slide4.jpg" />',
  7. ];
  8. // колбэк-функции связаны с событиями в cycle, их задачи понятны из названия
  9. function onloadedSlide(){
  10. $('#progressbar').hide();
  11. $('.container-show').cycle('resume');
  12. };
  13. function preSlide(current, next, options, forward){
  14. var img = $(next).find('img')[0];
  15. if (slides[0] && options.addSlide) {
  16. options.addSlide(slides.pop());
  17. };
  18. };
  19. function afterSlide(current, next, options, forward){
  20. var img = $('.container-show').find('img')[options.nextSlide];
  21. if (img.complete !=true) {
  22. $('.container-show').cycle('pause');
  23. $('#progressbar').show();
  24. loadingTimer = +new Date();
  25. $(img).bind("load",onloadedSlide);
  26. };
  27. if (slides[0] && options.addSlide) {
  28. options.addSlide(slides.pop());
  29. };
  30. };
  31. $('#shownext').one('mouseenter',function(){
  32.     $('.container-show').append(slides.pop()).cycle({ fx: 'fade', pause:true, next:'#shownext', after:afterSlide, before:preSlide, autostopCount: slides.length+2, delay:4000 });
  33. });
  34. $('#shownext').mouseleave(function(){
  35.     $(this).addClass('paused')
  36.     $('.container-show').cycle('pause');
  37. });
  38. $('#shownext').mouseenter(function(){
  39.     if($(this).hasClass('paused')){
  40.         $('.container-show').cycle('resume');
  41.         $(this).removeClass('paused');
  42.     }
  43. });
  44.  
  45. });


html:
CODE (html):
скопировать код в буфер обмена
  1.  
  2.     <a id="shownext">
  3.         <div id="progressbar" style="display:none">какой-нибудь .gif</div>
  4.         <div class="container-show">
  5.             <img alt="" src="/img/slide5.png" />
  6.         </div>
  7.     </a>

Собственно все.
Изначально юзеру загружается всего одна картинка.
При наведении курсора на изображение происходит подгрузка второго фото и иннициализация галереи (это можно изменить. В моем случае нужно было сразу показать эффект перехода к следующей фотке). Далее - подгрузка всех оставшихся картинок в браузер пользователя. В целях повышения производительности можно использовать метод destroy для убийства неактивных слайдеров, оставляя одну картинку. В моем случае метода pause оказалось достаточно.

(Отредактировано автором: 01 Июля, 2013 - 22:57:30)

 
 Top
EuGen Администратор
Отправлено: 01 Июля, 2013 - 17:02:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Примерно такой же функционал (только картинок несколько, поскольку слайдер) я реализовал в своё время на
ссылка (Отобразить)

- стандартный jcarousel


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
tuareg
Отправлено: 01 Июля, 2013 - 19:38:26
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




А чем Вас такой метод не устраивает? http://jquery[dot]page2page[dot]ru/index[dot][dot][dot]узка_изображений
 
 Top
Zuldek
Отправлено: 01 Июля, 2013 - 22:41:16
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Например тем что не стоит задача прелоада картинок.

(Отредактировано автором: 01 Июля, 2013 - 22:44:04)

 
 Top
tuareg
Отправлено: 01 Июля, 2013 - 22:50:20
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Нет, я не к тому(сам метод не плох, и изложен достаточно понятно). Просто возможна задержка, при загрузке следующей картинка. А это может смотреться не красиво. А так преалод, как раз решит проблемы с загрузкой только одной картинки по умолчанию и подгрузкой в фоновом режиме остальных. ИМХО конечно.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB