幻灯片/轮播

jQuery和css3带缩略图画廊插件

阿里云

这是一款使用 jQuery 和 css3 制作的顶部带缩略图的响应式图片画廊插件。该图片画廊插件最大的特点的响应式,适合于各种移动设备使用。该图片画廊插件有两种显示模式:带缩略图模式和幻灯片模式。这是一款 jQuery 和 css3 带缩略图响应式图片画廊插件,其灵感来自于 Twitter 的“user gallery”。我们在插件中做了一些改进,使幻灯片的大小等于屏幕视口的大小,并且可以使用键盘进行幻灯片的导航。这个插件是可以使你在 iPhone 或 iPad 上用手滑动屏幕进行图片浏览。

HTML 部分:

html 结构包括一个 wrapper rg-gallery,给它相同名称的 id。在其中的 rg-thumbs 的 div 用于放置缩略图和导航:

也想出现在这里?联系我们
创客主机
  1. <div id="rg-gallery" class="rg-gallery">
  2.     <div class="rg-thumbs">
  3.         <!-- Elastislide Carousel Thumbnail Viewer -->
  4.         <div class="es-carousel-wrapper">
  5.             <div class="es-nav">
  6.                 <span class="es-nav-prev">Previous</span>
  7.                 <span class="es-nav-next">Next</span>
  8.             </div>
  9.             <div class="es-carousel">
  10.                 <ul>
  11.                     <li>
  12.                         <a href="#">
  13.                             <img src="images/thumbs/1.jpg" data-large="images/1.jpg" alt="image01" data-description="Some description" />
  14.                         </a>
  15.                     </li>
  16.                     <li>...</li>
  17.                 </ul>
  18.             </div>
  19.         </div>
  20.         <!-- End Elastislide Carousel Thumbnail Viewer -->
  21.     </div><!-- rg-thumbs -->
  22. </div><!-- rg-gallery -->

缩略图上有两个 data 属性将在后面的 javascript 代码中使用到。“data-large”属性保存大图的路径,“data-description”属性包含图片的描述信息。大图区域我们将创建一个 jQuery 模板将它放在文档的顶部位置:

  1. <script id="img-wrapper-tmpl" type="text/x-jquery-tmpl">  
  2.     <div class="rg-image-wrapper">
  3.         {{if itemsCount > 1}}
  4.             <div class="rg-image-nav">
  5.                 <a href="#" class="rg-image-nav-prev">Previous Image</a>
  6.                 <a href="#" class="rg-image-nav-next">Next Image</a>
  7.             </div>
  8.         {{/if}}
  9.         <div class="rg-image"></div>
  10.         <div class="rg-loading"></div>
  11.         <div class="rg-caption-wrapper">
  12.             <div class="rg-caption" style="display:none;">
  13.                 <p></p>
  14.             </div>
  15.         </div>
  16.     </div>
  17. </script>

JAVASCRIPT 部分:

首先设置一下参数变量:

  1. // gallery container
  2. var $rgGallery          = $('#rg-gallery'),
  3.     // carousel container
  4.     $esCarousel         = $rgGallery.find('div.es-carousel-wrapper'),
  5.     // the carousel items
  6.     $items              = $esCarousel.find('ul > li'),
  7.     // total number of items
  8.     itemsCount          = $items.length;

然后定义画廊函数:

  1. Gallery             = (function() {
  2.         //gallery function
  3.     })();
  4.  
  5. Gallery.init();

这里将为当前的图片定义一些变量:模式(mode)和图片加载完成后的控制方式(anim)。然后调用初始化函数:

  1. var current         = 0, 
  2.     // mode : carousel || fullview
  3.     mode            = 'carousel',
  4.     // control if one image is being loaded
  5.     anim            = false,
  6.     init            = function() {    
  7.         // (not necessary) preloading the images here...
  8.         $items.add('<img src="images/ajax-loader.gif"><img src="images/black.png">').imagesLoaded( function() {
  9.             // add options
  10.             _addViewModes();
  11.  
  12.             // add large image wrapper
  13.             _addImageWrapper();
  14.  
  15.             // show first image
  16.             _showImage( $items.eq( current ) );
  17.         });
  18.         // initialize the carousel
  19.         _initCarousel();    
  20.     },

接下来调用 Elastislide 插件:

  1. _initCarousel   = function() {
  2.     $esCarousel.show().elastislide({
  3.         imageW  : 65,
  4.         onClick : function( $item ) {
  5.             if( anim ) return false;
  6.             anim    = true;
  7.             // on click show image
  8.             _showImage($item);
  9.             // change current
  10.             current = $item.index();
  11.         }
  12.     });
  13.     // set elastislide's current to current
  14.     $esCarousel.elastislide( 'setCurrent', current );
  15. },

下一个函数是控制切换显示模式的函数:

  1. _addViewModes   = function() {
  2.     // top right buttons: hide / show carousel
  3.     var $viewfull   = $('<a href="#" class="rg-view-full"></a>'),
  4.         $viewthumbs = $('<a href="#" class="rg-view-thumbs rg-view-selected"></a>'); 
  5.     $rgGallery.prepend( $('<div class="rg-view">').append( $viewfull ).append( $viewthumbs ) );
  6.     $viewfull.bind('click.rgGallery', function( event ) {
  7.         $esCarousel.elastislide( 'destroy' ).hide();
  8.         $viewfull.addClass('rg-view-selected');
  9.         $viewthumbs.removeClass('rg-view-selected');
  10.         mode    = 'fullview';
  11.         return false;
  12.     });
  13.     $viewthumbs.bind('click.rgGallery', function( event ) {
  14.         _initCarousel();
  15.         $viewthumbs.addClass('rg-view-selected');
  16.         $viewfull.removeClass('rg-view-selected');
  17.         mode    = 'carousel';
  18.         return false;
  19.     }); 
  20. },

_addImageWrapper 函数用于在图片数量大于 1 的时候添加大图和导航按钮。同时,它还社会化导航事件。我们通过 jQuery Touchwipe 插件增加键盘导航功能。

  1. _addImageWrapper= function() {    
  2.     $('#img-wrapper-tmpl').tmpl( {itemsCount : itemsCount} ).appendTo( $rgGallery );
  3.     if( itemsCount > 1 ) {
  4.         // addNavigation
  5.         var $navPrev        = $rgGallery.find('a.rg-image-nav-prev'),
  6.             $navNext        = $rgGallery.find('a.rg-image-nav-next'),
  7.             $imgWrapper     = $rgGallery.find('div.rg-image');
  8.  
  9.         $navPrev.bind('click.rgGallery', function( event ) {
  10.             _navigate( 'left' );
  11.             return false;
  12.         }); 
  13.         $navNext.bind('click.rgGallery', function( event ) {
  14.             _navigate( 'right' );
  15.             return false;
  16.         });
  17.         // add touchwipe events on the large image wrapper
  18.         $imgWrapper.touchwipe({
  19.             wipeLeft            : function() {
  20.                 _navigate( 'right' );
  21.             },
  22.             wipeRight           : function() {
  23.                 _navigate( 'left' );
  24.             },
  25.             preventDefaultEvents: false
  26.         });
  27.         $(document).bind('keyup.rgGallery', function( event ) {
  28.             if (event.keyCode == 39)
  29.                 _navigate( 'right' );
  30.             else if (event.keyCode == 37)
  31.                 _navigate( 'left' );    
  32.         });   
  33.     } 
  34. },

下面的函数控制浏览大图片:

  1. _navigate       = function( dir ) {      
  2.     if( anim ) return false;
  3.     anim    = true;
  4.     if( dir === 'right' ) {
  5.         if( current + 1 >= itemsCount )
  6.             current = 0;
  7.         else
  8.             ++current;
  9.     }
  10.     else if( dir === 'left' ) {
  11.         if( current - 1 < 0 )
  12.             current = itemsCount - 1;
  13.         else
  14.             --current;
  15.     }
  16.     _showImage( $items.eq( current ) );   
  17. },

最后定义 _showImage 函数用于显示图片和描述信息:

  1. _showImage      = function( $item ) {
  2.     // shows the large image that is associated to the $item
  3.     var $loader = $rgGallery.find('div.rg-loading').show();
  4.     $items.removeClass('selected');
  5.     $item.addClass('selected');
  6.     var $thumb      = $item.find('img'),
  7.         largesrc    = $thumb.data('large'),
  8.         title       = $thumb.data('description');
  9.     $('<img>').load( function() {
  10.         $rgGallery.find('div.rg-image').empty().append('<img src="' + largesrc + '">');
  11.         if( title )
  12.             $rgGallery.find('div.rg-caption').show().children('p').empty().text( title );
  13.         $loader.hide();
  14.         if( mode === 'carousel' ) {
  15.             $esCarousel.elastislide( 'reload' );
  16.             $esCarousel.elastislide( 'setCurrent', current );
  17.         }
  18.         anim    = false;  
  19.     }).attr( 'src', largesrc );
  20. };
  21. return { init : init };

jQuery 和 css3 带缩略图画廊插件

已有 441 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!