首页 > 技术文章 > 图片左右滑动整理为插件

huanhuan8808 2014-04-21 00:10 原文

在做web前端开发中,图片左右滑动的功能非常常用。在自己的改进下,这款插件支持

1.滑动方向的控制,上下滑动,左右滑动。

2.可随意改变滑动的区域大小

3.滑动中的样式都可以自定义。

4.兼容性良好,moz,ie,webkit

5.对滑动加入延迟加载

6.支持页面中的多处调用

以下是代码解析:

下看html结构:

      
/*参数
horizontal为1,水平滚动,
为0,垂直滚动,
可根据需求改变CSS满足页面要求
*/
<div class="cnt_goods_wrap cfix picSilde_style" horizontal="1"> <div class="cnt_goods_box"> <ul class="cnt_goods_list fl cfix cnt_border" > <li class="cnt_goods_item"> <div class="pro_img"> <a target="_blank" title="麦多多 Apple/苹果ipad5/ipad air钢化玻璃膜" href="http://www.okhqb.com/item/1000107901.html"> <img alt="麦多多 Apple/苹果ipad5/ipad air钢化玻璃膜" data-original="http://img1.hqbcdn.com/thumbs/product/bc/9c/bc9cfa5d80ce9c978b39fe9ac48cd70c.218.jpg" class="lazy" src="http://s.hqbcdn.com/assets/v3/images/blank.gif" style="display: inline;"></a> </div> </li> </ul> </div> <div style="clear:both" class=""></div> </div>
 

CSS文件类容

.cnt_goods_wrap .cnt_goods_box{ position:relative; width:1198px; height:351px; overflow:hidden; float:left;  z-index:1; }
.cnt_goods_wrap .cnt_goods_box .cnt_goods_list{    position:absolute; top:0px; left:0px;  }
.cnt_goods_wrap .cnt_goods_box .cnt_goods_list li{ width:239px;  background:#fff; float:left; }
.cnt_goods_wrap .cnt_goods_box .cnt_goods_list li  .pro_img{ width:239px;  text-align:center; vertical-align:middle; display:table-cell; *display: block; *font-family:Arial; } 
.cnt_goods_wrap .cnt_goods_box .cnt_goods_list li  .pro_img img{ width:218px; height:218px; text-align:center; vertical-align:middle; margin-top:25px; }
.cnt_goods_wrap .pre{ position:absolute; top:100px; left:10px; z-index:88; width:34px; height:107px;}
.cnt_goods_wrap .pre a{display:block; background:url(images/left_btn.jpg) no-repeat; 
width:34px; height:107px;  z-index:288;  }
.cnt_goods_wrap .next{ position:absolute; top:100px; right:10px; z-index:288; width:34px; height:107px;  }
.cnt_goods_wrap .next a{ display:block; background:url(images/right_btn.jpg) no-repeat; 
width:34px; height:107px;  }
.cnt_goods_wrap .pre a:hover{ }
.cnt_goods_wrap .next a:hover{ }

 对应的插件js内容:

$.extend({
        /*调用滑动*/
        /*根据加载的li标签数量初始化HTML中的结构*/
    $(".cnt_goods_list").each(function(i,index){
        var _hori = $(this).parents('.cnt_goods_wrap').attr('horizontal'),
            _hori = parseInt( _hori );
        if(_hori){
            var cgi_w = $(this).find("li.cnt_goods_item").outerWidth(true);
            var cgl_width = ( $(index).find(".cnt_goods_item").length ) *cgi_w;
            $(index).css("width", cgl_width+"px");    
        }else{
            var cgi_h = $(this).find("li.cnt_goods_item").outerHeight(true);
            var cgl_height = ( $(index).find(".cnt_goods_item").length ) *cgi_h;
            $(index).css("height", cgl_height+"px");    
        }
    });
     /*只有一屏的时候,不出现左右滑动箭头*/
     $(".cnt_goods_list").each(function(){
        var i = $(picSilde_style).find('.cnt_goods_box').width() / $(picSilde_style).find('li.cnt_goods_item').width();
            i = floor(i);
         var style_len = ($(this).find("li.cnt_goods_item").length)/i;    
         if( style_len <= 1 ){
            $(this).parents(".cnt_goods_wrap").find(".pre").hide();    
            $(this).parents(".cnt_goods_wrap").find(".next").hide();     
         }
     })
     
   picScroll: function(picSilde_style){
        var page =1;
        var hori;
    
        var _next = $(picSilde_style).children(".next");
        var _pre = $(picSilde_style).children(".pre");
        var _hori  = $(picSilde_style).attr('horizontal'),
            _hori = parseInt( _hori );
    var i = $(picSilde_style).find('.cnt_goods_box').width() / $(picSilde_style).find('li.cnt_goods_item').width();
            i = floor(i);
            
        /*next down*/
        /*处理向下箭头,向后箭头*/
        $(_next).click(function(){
            var cnt_goods_box = $(this).siblings(".cnt_goods_box");
            var cnt_goods_list = cnt_goods_box.find(".cnt_goods_list");
            var cgb_width = cnt_goods_box.width();
            var cgb_height = cnt_goods_box.height();
            var page_temp =  parseInt((cnt_goods_list.find("li.cnt_goods_item").length)/i ) ;        
            var remainder  = (cnt_goods_list.find("li.cnt_goods_item").length)%i;
            var page_count;
            if( remainder == 0 ){
                page_count = page_temp;    
            }else{
                page_count = page_temp + 1;    
            }
            
            if( $(this).siblings(".pre").find("a").hasClass("pre_unable")){
                    $(this).siblings(".pre").find("a").removeClass("pre_unable");
            }
            
            
            if( !cnt_goods_list.is(":animated") ){
                if(page == page_count ){    
                  $(this).find("a").addClass("next_unable");
                 }else{        
                    if( _hori ){
                           cnt_goods_list.animate({left:'-='+cgb_width},'5000');
                    }else{
                        cnt_goods_list.animate({top:'-='+cgb_height},'5000');
                        }
                   page++;             
                 }
             }        
        });
        
        /*pre up*/
      /*处理向上箭头,向前箭头*/
        $(_pre).click(function(){
            var cnt_goods_box = $(this).siblings(".cnt_goods_box");
            var cnt_goods_list = cnt_goods_box.find(".cnt_goods_list");
            var cgb_width = cnt_goods_box.width();
            var cgb_height = cnt_goods_box.height();
            var page_temp =  parseInt((cnt_goods_list.find(".cnt_goods_item").length)/i ) ;        
            var remainder  = (cnt_goods_list.find("li.cnt_goods_item").length)%i;        
            var page_count;
            
            if( $(this).siblings(".next").find("a").hasClass("next_unable")){
                    $(this).siblings(".next").find("a").removeClass("next_unable");
            }
            
            if( remainder == 0 ){
                page_count = page_temp;    
            }else{
                page_count = page_temp + 1;    
            }
            if( !cnt_goods_list.is(":animated") ){
                if(page == 1){    
                  $(this).find("a").addClass("pre_unable");
                 }else{ 
                   page--;
                   if( _hori ){
                           cnt_goods_list.animate({left:'+='+cgb_width},'slow');    
                   }else{
                       cnt_goods_list.animate({top:'+='+cgb_height},'slow');    
                    }
                 }
             }        
        });
        
        $(_pre).trigger("click");     
   }
})

调用方式:

$.picScroll('.picSilde_style');

 

推荐阅读