jquery插件,图片预加载,自适应宽高的图片slide,autoimgv1.1

* jQuery插件:autoimg
* 版本:v1.1
* 时间:2010-9-17
* 作者:飞飞
功能说明:
1.可以实现一个页面多次调用
2.所播放的图片宽高可以自适应外部框架
3.可以自定义播放时间间隔
查看示例:
http://www.ffasp.com/plugs/autoimg/

插件代码

 

代码
  1 /*
  2  * jQuery插件:autoimg
  3  *     版本:v1.1
  4  *  时间:2010-8-31
  5  *  作者:飞飞
  6  *  QQ:276230416
  7  *  网址:http://www.ffasp.com
  8  *  
  9  +--------------------------------------------------------------------
 10  *使用说明:
 11  *1.本插件支持一个页面多次使用
 12  *2.html模板如下
 13     <div class="autoimg">
 14       <div class="parentdiv"><img src="" /> </div>
 15       <ul class="imglist">
 16         <li><img src="image/1/0.jpg" /></li>
 17         <li><img src="image/1/1.jpg" /></li>
 18         <li><img src="image/1/2.jpg" /></li>
 19       </ul>
 20       <div class="clearboth"></div>
 21     </div>
 22  *3.参考样式[见示例:index.html]    
 23     <style type="text/css">
 24     .parentdiv {
 25         position:relative;
 26         overflow:hidden;
 27         height:300px;
 28         width:300px;
 29         border:1px solid #000;
 30         float:left;
 31     }
 32     .imglist {
 33         width:270px;
 34         float:left
 35     }
 36     .imglist li {
 37         width:80px;
 38         height:80px;
 39         overflow:hidden;
 40         float:left;
 41         margin:5px;
 42     }
 43     .imglist li img {
 44         width:80px
 45     }
 46     .clearboth {
 47         clear:both
 48     }
 49     </style>
 50  +--------------------------------------------------------------------
 51  */
 52 jQuery.fn.autoimg = function(G){
 53     
 54     var interval = new Array();
 55     var ord = new Array();
 56     var D = {
 57         delay:5,//幻灯片切换延时
 58         loadingImgSrc:"loading.gif"
 59     };
 60     $.extend(D,G)
 61 
 62     //初始化函数
 63     $.init = function(el,i){
 64     var framediv,frameimg,firstimg,i,f;
 65         framediv = $(el).children("div").eq(0);
 66         //frameimg = framediv.children("img");
 67         frameimg = $("<img />");
 68         frameimg.attr("src",D.loadingImgSrc);
 69         firstimg = $(el).children("ul").find("img").eq(0);
 70         imgwrap =  $(el).children("ul").children("li");
 71         //+--------------------------------------------------        
 72         imgMargins = $.imgCenter({"w": framediv.width() ,"h":framediv.height()},{"w":64,"h":64});
 73         frameimg.css({width:64,height:64,marginLeft:imgMargins.l,marginTop:imgMargins.t})
 74         framediv.html(frameimg);
 75         //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 76         framediv.loadthumb({parentDiv:framediv,frameimg:frameimg,img:firstimg});
 77         $.imgSlide(el,i);
 78     } 
 79      //自动播放切换图片列表
 80     $.imgSlide = function(el,i){
 81         ord[i] = 0;
 82         interval[i] = setInterval(function(){$.interval(el,i,ord[i])},D.delay*1000);
 83     }
 84 
 85     $.interval = function(el,i,j){
 86         var framediv,frameimg,firstimg;
 87         var imgSrc,imgLength,i;
 88     
 89         framediv = $(el).children("div");
 90         frameimg = framediv.children("img");
 91         firstimg = $(el).children("ul").find("img").eq(0);
 92         imgwrap =  $(el).children("ul").children("li");
 93     
 94         imgLength = imgwrap.size();
 95         if(j>=imgLength){j=0};
 96         if(j < imgLength){
 97             framediv.loadthumb({parentDiv:framediv,frameimg:frameimg,img:imgwrap.find("img").eq(j)});
 98         }
 99         if(j<imgLength){
100             ord[i]=j+1;
101         }else{ord[i]=0;};
102     }
103     //图片预加载
104     jQuery.fn.loadthumb = function(D) {
105         var imgTmp,imgDem,imgMargins;
106         D = $.extend({
107              parentDiv : {},
108              img:{},
109              frameimg : {}
110         },D);
111         D.frameimg.hide();
112         imgTmp = new Image();
113         $(imgTmp).load(function(){
114             imgDem = {};
115             imgDem.w  = imgTmp.width;
116             imgDem.h  = imgTmp.height;
117             imgDem = $.imgResize({"w":D.parentDiv.width() ,"h": D.parentDiv.height()},{"w":imgDem.w,"h":imgDem.h});
118             imgMargins = $.imgCenter({"w": D.parentDiv.width() ,"h": D.parentDiv.height()},{"w":imgDem.w,"h":imgDem.h});
119             D.frameimg.css({width:imgDem.w,height:imgDem.h,marginLeft:imgMargins.l,marginTop:imgMargins.t})
120                       .attr("src",D.img.attr("src"))
121                       .fadeIn("slow");
122         }).attr("src",D.img.attr("src"));//.attr("src",options.src)要放在load后面,
123         
124     }
125     
126     //重置图片宽度,高度插件 ( parentDem是父元素,imgDem是图片 )
127     jQuery.imgResize = function(parentDem,imgDem){
128         if(imgDem.w>0 && imgDem.h>0){
129             var rate = (parentDem.w/imgDem.w < parentDem.h/imgDem.h)?parentDem.w/imgDem.w:parentDem.h/imgDem.h;
130             //如果 指定高度/图片高度  小于  指定宽度/图片宽度 ,  那么,我们的比例数 取 指定高度/图片高度。
131             //如果 指定高度/图片高度  大于  指定宽度/图片宽度 ,  那么,我们的比例数 取 指定宽度/图片宽度。
132             if(rate <= 1){   
133                 imgDem.w = imgDem.w*rate; //图片新的宽度 = 宽度 * 比例数
134             }else{//  如果比例数大于1,则新的宽度等于以前的宽度。
135                 imgDem.w = imgDem.w;
136             }
137             if(rate <= 1){   
138                 imgDem.h = imgDem.h*rate;
139             }
140             else{
141                 imgDem.h = imgDem.h;
142             }
143         }    
144         return imgDem;
145     }
146     //使图片在父元素内水平,垂直居中,( parentDem是父元素,imgDem是图片 )
147     jQuery.imgCenter = function(parentDem,imgDem){
148         var left = (parentDem.w - imgDem.w)*0.5;
149         var top = (parentDem.h - imgDem.h)*0.5;
150         return { "l": left , "t": top};
151     }
152     //图片列表鼠标悬停效果
153     jQuery.imgHover = function(el,i){
154         var framediv,frameimg,firstimg;
155         var imgSrc,imgLength,i;
156     
157         framediv = $(el).children("div");
158         frameimg = framediv.children("img");
159         firstimg = $(el).children("ul").find("img").eq(0);
160         imgwrap =  $(el).children("ul").children("li");
161     
162         $(el).children("ul").children("li").hover(
163             function(){
164                 framediv.loadthumb({parentDiv:framediv,frameimg:frameimg,img:$(this).find("img")})    ;
165                 clearInterval(interval[i]);
166             },function(){
167                 ord[i] = $(el).children("ul").children("li").index($(this))+1;
168                 interval[i] = setInterval(function(){$.interval(el,i,ord[i])},D.delay*1000);                
169             });
170     }
171 
172     $(this).each(function(i){
173         $.init(this,i);
174         $.imgHover(this,i);
175     });
176 };

 

 

posted @ 2010-09-22 18:16  飞妮莫属  阅读(934)  评论(0编辑  收藏  举报