jq图片预加载+自动等比例缩放插件

/*
**************图片预加载插件******************
///作者:没剑(2008-06-23)
///http://regedit.cnblogs.com

///说明:在图片加载前显示一个加载标志,当图片下载完毕后显示图片出来
可对图片进行是否自动缩放功能
此插件使用时可让页面先加载,而图片后加载的方式,
解决了平时使用时要在图片显示出来后才能进行缩放时撑大布局的问题
///参数设置:
scaling     是否等比例自动缩放
width       图片最大高
height      图片最大宽
loadpic     加载中的图片路径
*/
jQuery.fn.LoadImage
=function(scaling,width,height,loadpic){
    
if(loadpic==null)loadpic="load3.gif";
    
return this.each(function(){
        
var t=$(this);
        
var src=$(this).attr("src")
        
var img=new Image();
        
//alert("Loading")
        img.src=src;
        
//自动缩放图片
        var autoScaling=function(){
            
if(scaling){
            
                
if(img.width>0 && img.height>0){ 
                    
if(img.width/img.height>=width/height){ 
                        
if(img.width>width){ 
                            t.width(width); 
                            t.height((img.height
*width)/img.width); 
                        }else
                            t.width(img.width); 
                            t.height(img.height); 
                        } 
                    } 
                    
else
                        
if(img.height>height){ 
                            t.height(height); 
                            t.width((img.width
*height)/img.height); 
                        }else
                            t.width(img.width); 
                            t.height(img.height); 
                        } 
                    } 
                } 
            }    
        }
        
//处理ff下会自动读取缓存图片
        if(img.complete){
            
//alert("getToCache!");
            autoScaling();
            
return;
        }
        $(
this).attr("src","");
        
var loading=$("<img alt=\"加载中\" title=\"图片加载中\" src=\""+loadpic+"\" />");
        
        t.hide();
        t.after(loading);
        $(img).load(
function(){
            autoScaling();
            loading.remove();
            t.attr(
"src",this.src);
            t.show();
            
//alert("finally!")
        });
        
    });
}

使用说明:
$("div img").LoadImage(true,120,90);

效果如下:



欢迎大家交流使用心得
posted @ 2008-06-23 15:47 没剑 阅读(548) 评论(8)  编辑 收藏 网摘 所属分类: JQuery

  回复  引用    
#1楼 2008-08-13 18:42 | gavindev [未注册用户]
你好,

看到你的loadimage插件,用起来很方便,谢谢。

有一个问题请教一下,在我Load完成后,浏览器状态栏一直显示“”正在下载loading.gif图片,图片是存在的。且有load了多少图片,就显示剩余几个。

如果是插件问题,希望能改进一下。

如果方便,可以给我发邮件:gavindev@126.com


thank you very much!



gavin
  回复  引用    
#2楼 2008-08-15 10:45 | anyLiv [未注册用户]
width 图片最大高
height 图片最大宽

^_^ 这两句说明好像写反了
  回复  引用    
#3楼 2008-08-15 10:46 | anyLiv [未注册用户]
想请教如果不想限制高,有特定的参数还是给一个相当大的值就行了。
  回复  引用  查看    
#4楼 [楼主]2008-08-18 23:19 | 没剑      
@gavindev
呵呵,你说的哪个问题我也发现过了,大概的原因可能是有时网速很快,这样子如果要自动加载的图片很快就加载完了,而JS正好才加载完用来显示LOADING的图片,所以程序无法自动去移除LOAD这个元素,所以就会造成好像一直在加载一样,如果使用文字样式的如“加载”就没有这个问题
等我有空我再针对这个问题看看有否解决的方法,感谢您的关注~
  回复  引用  查看    
#5楼 [楼主]2008-08-18 23:19 | 没剑      
@anyLiv
^_^ 不好意思,写错~
  回复  引用  查看    
#6楼 [楼主]2008-08-18 23:20 | 没剑      
@anyLiv
呵呵,你这个问题插件里我暂时没有设置哦,等我更新过后再通知你吧,谢谢
  回复  引用  查看    
#7楼 2008-09-29 17:12 | ゞ智者.千虑      

--引用--------------------------------------------------
没剑: @gavindev
呵呵,你说的哪个问题我也发现过了,大概的原因可能是有时网速很快,这样子如果要自动加载的图片很快就加载完了,而JS正好才加载完用来显示LOADING的图片,所以程序无法自动去移除LOAD这个元素,所以就会造成好像一直在加载一样......
--------------------------------------------------------

这个问题貌似可以这样解决:在插件的最后这里

        $(img).load(function(){
            autoScaling();
            loading.remove();
            t.attr(
"src",this.src);
            loading.remove();
            t.show();
            
//alert("finally!")
        });

多进行一次loading.remove();

这样写没有发现报错,功能也没发现问题,就是不知道有没有什么潜在的错误....
  回复  引用  查看    
#8楼 [楼主]2008-10-01 00:24 | 没剑      
@ゞ智者.千虑
感谢你的回复,不过我觉得问题可能不是在这里,不过我现在暂时都没有时间是测试,等我测试过再给你们一个好的解决方法吧~

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-16 14:53 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: