ImagesLazyLoad 图片延迟加载效果

之前在做一个图片浏览效果时,要看后面的小图必须等到前面的加载完,而且大图的位置是在大量的小图后面,导致大图要等到小图都加载完才能显示,为了解决这个问题,就想到了Lazyload效果。
现在很多网站都用了类似的效果,如淘宝、Bing等。
这个图片延迟加载效果是在Lazyload的基础上扩展的,主要扩展了获取img元素,获取src和图片加载的部分。

兼容:ie6/7/8, firefox 3.5.5, opera 10.10, safari 4.0.4, chrome 3.0
其中safari和chrome部分功能不支持。


效果预览

图片延迟加载:共有图片 张,未载入

 

程序说明

【获取图片】

先定义filter函数作为筛选程序:

代码
var getSrc = opt.getSrc,
    filter 
= $$F.bind( this._filter, this,
            opt[
"class"],
            getSrc 
? function(img){ return getSrc(img); }
                : 
function(img){ return img.getAttribute( attribute ) || img.src; },
            opt.holder
        );


然后用这个filter函数筛选出需要的图片集合:

this._elems = $$A.filter(
        opt.images 
|| container.getElementsByTagName("img"), filter
    );

如果要自定义图片集合可以在程序可选参数的images属性来设置,否则自动从容器获取img元素作为图片集合。

这里的filter其实是包装了筛选样式cls、获取src的方法getSrc和占位图holder三个参数的_filter筛选程序。
在_filter程序中,会对图片集合进行筛选和整理。
如果自定义了"class"筛选样式,会自动排除样式不对应的图片:

if ( className && (" " + img.className + " ").indexOf(" " + className + " "== -1 ) return false;


再用getSrc获取原图地址,即实际要显示的图片地址。
如果有自定义getSrc会优先使用。
没有的话,再通过保存原图地址的_attribute自定义属性从元素获取。
最后才直接从元素的src属性获取。

接着排除src不存在的:

if ( !src ) return false;


要注意处理原图地址就是元素当前src的情况:

if ( src == img.src ) {
    
if ( img.complete || $$B.chrome || $$B.safari ) return false;
    img.removeAttribute(
"src");
}

如果complete为true,说明图片已经载入完成了,可以排除;
如果是chrome或safari,不能取消当前加载,所以也排除掉(具体看图片的HTTP请求部分)。
否则,用removeAttribute移除src属性来取消图片当前的加载。

如果设置了holder占位图,就重新设置图片src:

if ( holder ) { img.src = holder; }


最后把原图地址记录到元素的_attribute自定义属性中:

img.setAttribute( this._attribute, src );


逐个图片元素筛选整理后,就得到要加载的图片集合了。


【图片加载】

ImagesLazyLoad相比LazyLoad,已经实现了_onLoadData加载程序,不需要再自己定义加载。
在_onLoadData程序中,主要是用来显示图片。

先用_hasAttribute方法判断是否有_attribute自定义属性。
在_hasAttribute方法中是这样判断的:

this._hasAttribute = $$B.ie6 || $$B.ie7
    
? function(img){ return attribute in img; }
    : 
function(img){ return img.hasAttribute( attribute ); };

由于ie6/7跟其他浏览器对attribute和property的理解不同,所以要分开处理,详细参考这里的attribute/property
为了保证兼容性,程序会优先使用attribute的方式来操作自定义属性。

当img有_attribute自定义属性时,就用getAttribute来获取原图地址,并设置img的src,在用removeAttribute来移除自定义属性。
移除的意义在于,当有多个实例使用同一个元素时,能保证图片加载一次后就不会重复加载,即防止实例间的冲突。


【图片的HTTP请求】

这里说说开发过程中发现的一些关于图片加载的问题。

首先是加载空字符串的问题,如果给img的src设为空字符串的话,可能会得到意料之外的结果。
例如在 http://xxx/test.htm 里面的 <img src=""> 会发生以下情况:
ie 会产生相对地址的请求,即:http://xxx/
Safari/Chrome 会产生当前页面地址的请求,即:http://xxx/test.htm
Opera/Firefox 不会产生请求
详细参考Nicholas C. Zakas的“Empty image src can destroy your site”。
如果不想加载图片,不应该把src设为空值,因为还可能会发出请求,浪费资源。
可以像程序那样,通过removeAttribute来移除就行了。

还有一个问题是在Safari和Chrome,由于webkit内核的bug,正在加载的图片并不能取消加载。
所以程序在取消图片加载的部分,如果是Safari或Chrome会继续加载,不进行延迟。
这个问题最初从lifesinger的datalazyload的说明部分看到的,具体可以自己用Fiddler来测试。

更多相关资料可以参考lifesinger的“图片的HTTP请求”。


【继承结构】

在发布的程序中,这是第一个用了继承的,本人平时也没怎么用到,所以还不成熟,算是试试水吧。
程序用wrapper来做继承,详细参考工具库的说明
先用wrapper给ImagesLazyLoad包装(继承)LazyLoad:

var ImagesLazyLoad = $$.wrapper(function(options) {
    ...
}, LazyLoad);


再用extend扩展prototype,添加子类的方法函数:

$$.extend( ImagesLazyLoad.prototype, {
  ...
});


其中_initialize方法用来设置子类属性,由于覆盖了父类的同名方法,所以要通过LazyLoad.prototype._initialize来调用,还要注意用call来修正this。

还有_setOptions方法用来设置子类的可选属性:

return LazyLoad.prototype._setOptions.call(this, $$.extend({
    ...
}, $$.extend( options, {
    onLoadData:    
this._onLoadData
})));

子类的_setOptions方法也覆盖了父类的方法,解决方法同_initialize。
其中第一个参数是子类的可选属性,第二个参数是子类定义的属性,即不再是可选而是由程序来定义的属性。

总体来说,这是个简陋的继承,等以后积累了一定经验再来扩展吧。


使用技巧

【设置src】

有几个方法可以设置原图地址:
1,正常设置src:渐进增强,不支持js时也能显示,但chrome和safari有bug,不支持这种方式;
2,把原图地址设置到自定义属性中:所有浏览器都兼容,但在不支持js时图片不能显示;
3,用自定义函数获取:使用在比较复杂的情况,需要手动设置。
具体还是要根据实际情况来选择。

【设置holder】

如果使用了holder占位图,程序会自动设置图片元素显示占位图。
推荐使用loading图片来设置,但loading图往往跟原图的尺寸是不同的。
如果img设置了原图宽高,又想保持loading图的尺寸,把它设为背景就可以了。
但这样在ie下,不设置src默认会有一个小图标。
要去掉这个小图标可以设置holder为一个透明图片的链接,或者参考这里的TRANSPARENT“做”一个透明图片。
实例中也是这样设置的,可以参考一下。

【执行程序】

千万不能在window.onload中执行,因为那时图片都已经加载完了。
而应该在容器后面(window的话是文档结尾)或DOMContentLoaded中执行。


程序源码 

代码
var ImagesLazyLoad = $$.wrapper(function(options) {
    
this._initialize( options );
    
//如果没有元素就退出
    if ( this.isFinish() ) return;
    
//初始化模式设置
    this._initMode();
    
//进行第一次触发
    this.resize(true);
}, LazyLoad);

$$.extend( ImagesLazyLoad.prototype, {
  
//初始化程序
  _initialize: function(options) {
    LazyLoad.prototype._initialize.call(
this, [], options);
    
//设置子类属性
    var opt = this.options;
    
this.onLoad = opt.onLoad;
    
var attribute = this._attribute = opt.attribute;
    
//设置加载图片集合
    var getSrc = opt.getSrc,
        filter 
= $$F.bind( this._filter, this,
                opt[
"class"],
                getSrc 
? function(img){ return getSrc(img); }
                    : 
function(img){ return img.getAttribute( attribute ) || img.src; },
                opt.holder
            );
    
this._elems = $$A.filter(
            opt.images 
|| this._container.getElementsByTagName("img"), filter
        );
    
//判断属性是否已经加载的方法
    this._hasAttribute = $$B.ie6 || $$B.ie7
        
? function(img){ return attribute in img; }
        : 
function(img){ return img.hasAttribute( attribute ); };
  },
  
//设置默认属性
  _setOptions: function(options) {
    
return LazyLoad.prototype._setOptions.call(this, $$.extend({//默认值
        images:        undefined,//图片集合
        attribute:    "_lazysrc",//保存原图地址的自定义属性
        holder:        "",//占位图
        "class":    "",//筛选样式
        getSrc:        undefined,//获取原图地址程序
        onLoad:        function(){}//加载时执行
    }, $$.extend( options, {
        onLoadData:    
this._onLoadData
    })));
  },
  
//筛选整理图片对象
  _filter: function(cls, getSrc, holder, img) {
    
if ( cls && img.className !== cls ) return false;//排除样式不对应的
    //获取原图地址
    var src = getSrc(img);
    
if ( !src ) return false;//排除src不存在的
    if ( src == img.src ) {
        
//排除已经加载或不能停止加载的
        if ( img.complete || $$B.chrome || $$B.safari ) return false;
        img.removeAttribute(
"src");//移除src
    }
    
if ( holder ) { img.src = holder; }
    
//用自定义属性记录原图地址
    img.setAttribute( this._attribute, src );
    
return true;
  },
  
//显示图片
  _onLoadData: function(img) {
    
var attribute = this._attribute;
    
if ( this._hasAttribute( img ) ) {
        img.src 
= img.getAttribute( attribute );
        img.removeAttribute( attribute );
        
this.onLoad( img );
    }
  }
});

 

完整实例下载

转载请注明出处:http://www.cnblogs.com/cloudgamer/

如有任何建议或疑问,欢迎留言讨论。

如果觉得文章不错的话,欢迎点一下右下角的推荐。

程序中包含的js工具库CJL.0.1.min.js,原文在这里

posted @ 2010-03-03 09:16 cloudgamer 阅读(37466) 评论(115) 编辑 收藏

评论共2页: 上一页 1 2 
 回复 引用 查看   
#16楼[楼主] 2010-03-03 15:44 cloudgamer      
@徐培华
@任力
谢谢支持

 回复 引用 查看   
#17楼 2010-03-03 17:49 小皇帝      
效果不错,顶
 回复 引用 查看   
#18楼 2010-03-03 19:41 王.若.      
支持博主!开始研究。。。
 回复 引用 查看   
#19楼[楼主] 2010-03-03 20:51 cloudgamer      
@小皇帝
@王.若.
谢谢支持

 回复 引用 查看   
#20楼 2010-03-03 23:05 jiang_chao      
谢谢!学习一下!第一次发表,呵呵
 回复 引用 查看   
#21楼 2010-03-09 16:30 王金平      
太强大了,先收藏
 回复 引用 查看   
#22楼 2010-03-09 16:57 剑无名      
赞一个,大哥!我一直很关注你的博客,希望有更多棒的作品出现!PS,美女好养眼啊!
 回复 引用 查看   
#23楼[楼主] 2010-03-09 18:15 cloudgamer      
@剑无名
@王金平
@jiang_chao
谢谢支持!

 回复 引用 查看   
#24楼 2010-03-18 10:59 山外人      
请教一下 ("innerHeight" in window) 你的这种用法是怎么来的?查文档找不到说明,是判断IE浏览器是吗?
 回复 引用 查看   
#25楼[楼主] 2010-03-18 11:34 cloudgamer      
@山外人
就是in而已啊
看window有没有innerHeight

 回复 引用 查看   
#26楼 2010-03-18 14:52 七哥      
8错8错,支持下先
 回复 引用 查看   
#27楼 2010-03-24 13:28 Rock.Liuxn      
支持!
 回复 引用 查看   
#28楼 2010-03-25 11:33 lwyx      
楼主真是太强了,为了顶你特意注册了
 回复 引用   
#29楼 2010-03-25 13:42 嘻嘻嘻[未注册用户]
挺好
 回复 引用 查看   
#30楼[楼主] 2010-03-25 13:43 cloudgamer      
@嘻嘻嘻
@Rock.Liuxn
@七哥
谢谢支持

 回复 引用 查看   
#31楼[楼主] 2010-03-25 13:44 cloudgamer      
@lwyx
评论应该不用注册的吧
谢谢支持!

 回复 引用 查看   
#32楼 2010-04-01 08:52 Do you know, jack?      
效果很好, 要是做成jQuery插件就更好了.
 回复 引用 查看   
#33楼[楼主] 2010-04-01 09:25 cloudgamer      
@Do you know, jack?
暂时没这个计划
我还不熟悉jq的使用

 回复 引用   
#34楼 2010-04-02 16:09 nhbklc[未注册用户]
能不能变成竖向的
 回复 引用 查看   
#35楼[楼主] 2010-04-02 16:40 cloudgamer      
@nhbklc
可以啊
用vertical模式

 回复 引用   
#36楼 2010-04-03 08:39 nhbklc[未注册用户]
能不能给竖向的实例
this.options = {//默认值
container: window,//容器
mode: "vertical",//模式
threshold: 0,//加载范围阈值
delay: 100,//延时时间
beforeLoad: function(){},//加载前执行
onLoadData: function(){}//显示加载数据
};
而且我看你的实例是用table实现的,用ul和li不是更好吗?

 回复 引用 查看   
#37楼[楼主] 2010-04-03 09:09 cloudgamer      
@nhbklc
html跟css可以你自己写 跟程序没什么关系
我给出的只是例子而已

 回复 引用 查看   
#38楼 2010-04-03 09:52 舞千愁      
我喜欢点广告
 回复 引用 查看   
#39楼[楼主] 2010-04-03 10:38 cloudgamer      
@舞千愁
不是恶意点击就好;)

 回复 引用   
#40楼 2010-04-08 16:19 360[未注册用户]
很强大,学习了.谢谢.
 回复 引用 查看   
#41楼 2010-04-28 18:04 Ian.w      
能不能把div的子元素push到cells数组中啊
就像把td元素push到cells用到这个方法cells.push(row.cells[i++])

 回复 引用 查看   
#42楼[楼主] 2010-04-28 22:01 cloudgamer      
@Ian.w
用getElementsByTagName来获取就行了

 回复 引用 查看   
#43楼[楼主] 2010-04-28 22:01 cloudgamer      
@360
谢谢支持

 回复 引用 查看   
#44楼 2010-05-05 17:06 小小乐      
确实不错))''''''
 回复 引用   
#45楼 2010-05-19 15:21 kkkkkk_kkkkk[未注册用户]
高人,拜服
 回复 引用   
#46楼 2010-05-22 15:06 hallowking[未注册用户]
不会用。。。
 回复 引用 查看   
#47楼[楼主] 2010-05-22 15:55 cloudgamer      
@kkkkkk_kkkkk
@小小乐
谢谢支持

 回复 引用 查看   
#48楼[楼主] 2010-05-22 15:55 cloudgamer      
@hallowking
哪里不懂呢

 回复 引用   
#49楼 2010-06-20 13:07 TaoGOGO[未注册用户]
真不错,谢谢博主,不过我希望能有个不带包的js代码,带着个js包挺大的
 回复 引用 查看   
#50楼[楼主] 2010-06-20 13:22 cloudgamer      
@TaoGOGO
什么js包?

 回复 引用 查看   
#51楼 2010-07-07 11:33 蓝丶 sky      
lz的是横向的
垂直的怎么弄?
我把mode改成mode: "vertical"还是不行
而且我不是用table
用的是li
麻烦lz帮帮忙!

 回复 引用 查看   
#52楼[楼主] 2010-07-07 15:32 cloudgamer      
@蓝丶 sky
也一样啊
跟你的html没什么关系
模式选择vertical就行了

 回复 引用   
#53楼 2010-08-04 11:34 mohuangjason[未注册用户]
用DIV的怎么改啊。
var img = row.appendChild(cells[0].cloneNode(true)).getElementsByTagName("img")[0];
报这里出错,数据从数据库读出来。

 回复 引用 查看   
#54楼[楼主] 2010-08-04 13:54 cloudgamer      
@mohuangjason
那段代码是测试时用来加图片的
实际应用时没有用的
你按html输出图片就行了

 回复 引用   
#55楼 2010-08-04 15:23 mohuangjason[未注册用户]
var row1=document.getElementById('List1'), row =row1.getElementsByTagName('li'), msg = $$("idShow"), total = $$("idTotal"), cells = []
img=row[0].getElementsByTagName("img")[0];
img.setAttribute("_lazysrc", img.getAttribute("_lazysrc") + "?" + Math.random());
我用的是<ul><li></li></ul>,现在是可以运行了,但是在火狐效果明显,在IE下是刚打开页面时就全部加载完了,火狐下可以看到还没浏览的图片会一张张加载。
不明白是怎么会事。

 回复 引用   
#56楼 2010-08-04 15:30 mohuangjason[未注册用户]
可以了,script 加个defer="defer"就可以了。不然iE会全部都加载完。
 回复 引用 查看   
#57楼[楼主] 2010-08-04 16:13 cloudgamer      
@mohuangjason
不是很清楚你是什么情况
如果你是把src放在_lazysrc的话那无论怎样也不会立即加载的

 回复 引用   
#58楼 2010-08-26 13:24 freebeyond[未注册用户]
绝对的高手,非常不错……
 回复 引用   
#59楼 2010-09-09 10:56 noyobo[未注册用户]
才发现程序.太有爱了.
 回复 引用 查看   
#60楼 2010-09-17 11:18 肥嘟嘟左卫门      
很好、
 回复 引用 查看   
#61楼 2010-09-17 13:45 肥嘟嘟左卫门      
请问出现这两个错误是怎么回事呢?
this._getRect is not a function
img is undefined

 回复 引用 查看   
#62楼[楼主] 2010-09-17 13:54 cloudgamer      
@noyobo
@freebeyond
谢谢支持

 回复 引用 查看   
#63楼[楼主] 2010-09-17 13:55 cloudgamer      
@肥嘟嘟左卫门
用实例测试的吗

 回复 引用 查看   
#64楼 2010-09-17 13:59 肥嘟嘟左卫门      
@cloudgamer
谢谢楼主如此快速的回复,我用您的例子更改和测试通过的,但是我加到自己的网站就出错了,您的js我很多看不懂啊,写的很深,所以我改不了,希望你能帮我看看大该是什么原因。

 回复 引用 查看   
#65楼[楼主] 2010-09-17 14:28 cloudgamer      
@肥嘟嘟左卫门
如果是加到网站出问题就只能你自己调试了

 回复 引用 查看   
#66楼 2010-09-25 13:56 姚佳      
想问下cloudgamer, 我想用在discuz论坛里的图片上,但发现有时候图片源码是这样的
<img height="768" width="576" alt="SPM_B0467.jpg" id="aimg_37981" thumbimg="1" file="attachment.php?aid=Mzc5ODF8MzMzODQ1NGZ8MTI4NTM5MzI1Nnw2OWNkRDhNNDZTd20wU1p5NmhKK1hWdkZQUjBzRCswUXhWMHc2RjI3UGF5QU9mOA%3D%3D&amp;noupdate=yes" src="attachment.php?aid=Mzc5ODF8MzMzODQ1NGZ8MTI4NTM5MzI1Nnw2OWNkRDhNNDZTd20wU1p5NmhKK1hWdkZQUjBzRCswUXhWMHc2RjI3UGF5QU9mOA%3D%3D&amp;noupdate=yes">

src结尾不是.jpg之类的,能用吗?

 回复 引用 查看   
#67楼[楼主] 2010-09-25 15:06 cloudgamer      
@姚佳
你可以的
用动态输出图片数据就行

 回复 引用 查看   
#68楼 2010-09-25 19:55 姚佳      
还是不太明白 。 能不能给个直接就是单独网页的。不加那些重新开始按钮什么的。
 回复 引用 查看   
#69楼[楼主] 2010-09-25 20:28 cloudgamer      
@姚佳
这个自己调试吧

 回复 引用 查看   
#70楼 2010-10-12 13:57 sky@fly      
很好!楼主玩转JS真是得心应手@
 回复 引用 查看   
#71楼 2010-11-16 20:18 sotnte      
奇怪了。 为什么只要把<table> <tr>两个标签换了就不能显示图片呢?
 回复 引用 查看   
#72楼 2010-11-16 22:06 sotnte      
大哥,我对这些都不懂,只想加你的代码用,但是不能用DIV,能告诉怎么使用么?
 回复 引用 查看   
#73楼[楼主] 2010-11-17 09:36 cloudgamer      
@sky@fly
谢谢支持

 回复 引用 查看   
#74楼[楼主] 2010-11-17 09:36 cloudgamer      
@sotnte
那是你自己的代码有问题吧
你看看你的内容结构

 回复 引用 查看   
#75楼 2010-11-17 11:27 sotnte      
<table cellspacing="0" cellpadding="0">
<tr id="idLazy">
<td><a href="http://www.cnblogs.com/cloudgamer/archive/2009/12/22/ImagePreview.html"> <img _lazysrc="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_song1.jpg" alt="图片上传预览" /> </a></td></tr>
</table>
我下了你的实例也是这样的,只要把<table>或者<td>换成<div>图片就不会显示了,

 回复 引用 查看   
#76楼[楼主] 2010-11-17 11:38 cloudgamer      
@sotnte
div跟table是不同的东西直接换能行吗
学学html先吧

 回复 引用 查看   
#77楼 2010-11-17 12:00 sotnte      
唉,楼主没理解我意思,可能我没表达清楚,还是我自己自己在试试。
 回复 引用 查看   
#78楼 2010-12-14 00:16 小xie      
你好,博主,首先要非常感谢你!
----------------------------
想请教您一下,当我设置container:window时候,美工那边在做布局的时候,把部分布局的图片没有写在css,而是放在了前台,这样页面加载时候,我拖拉滚动条,一些布局的图片也呈现出加载的状态了,如果将布局图片_lazysrc=“”修改成了src=“”在ff里面是传统的加载,而在ie里面还是懒加载,请问要怎么解决呢,让它变成传统的图片加载呢?
---------------------
表达能力不好,不知道您听明白了没?O(∩_∩)O~

 回复 引用 查看   
#79楼 2010-12-14 00:56 小xie      
不好意思博主,仔细看了您的文章可以设置"class": ""这个属性,但是出现的问题是,我要懒加载的图片的class有多种呢?是不是只有定义多个ImagesLazyLoad呢?博主是否可以考虑下把class属性值修改成集合类型的呢?
 回复 引用 查看   
#80楼[楼主] 2010-12-14 08:59 cloudgamer      
@小xie
这里我也没考虑好
img.className !== cls
这里你改成正则判断是否包含样式就行了

 回复 引用 查看   
#81楼 2010-12-14 09:05 小xie      
博主,如果是2个tab页,一个默认显示,一个默认隐藏;开始加载时,处于隐藏状态tab的图片,是未加载,这个要怎么做呢?
 回复 引用 查看   
#82楼[楼主] 2010-12-14 09:12 cloudgamer      
@小xie
显示的时候再实例化试试

 回复 引用 查看   
#83楼 2010-12-15 00:58 小xie      
你好博主,不好意思,又是我,打搅了啊,我用了这个在IE6里面和遨游里面会出问题呢,就是图片一直加载,错误是,LazyLoad未定义,还有就是缺少标识符,字符串或数字,是什么原因呢,之前只ie7,8测试时没问题的!
 回复 引用 查看   
#84楼 2010-12-15 02:20 小xie      
你好博主,我看上面有同学问了支持IE6吗?您说支持的,我下载了您源码在IE里面显示不出来图片,请问是怎么一回事呢?
 回复 引用 查看   
#85楼[楼主] 2010-12-15 09:16 cloudgamer      
@小xie
估计是你编码没统一

 回复 引用 查看   
#86楼 2010-12-15 09:30 小xie      
感谢博主, 你终于出现了哈哈,加上charset="gb2312"就OK了,博主,厉害!!!我爱死你了!!!
 回复 引用 查看   
#87楼 2010-12-27 15:45 ryoh      
这个和jqtouch 是不是有冲突
 回复 引用 查看   
#88楼[楼主] 2010-12-27 21:22 cloudgamer      
@ryoh
没有啊
这个博客也有jq

 回复 引用 查看   
#89楼 2011-01-28 11:39 East神奇      
请教下 这个跟jquery ajax一起用会冲突吗?
 回复 引用 查看   
#90楼[楼主] 2011-01-28 13:28 cloudgamer      
@East神奇
应该不会吧

 回复 引用   
#91楼 2011-02-04 15:51 7788ok[未注册用户]
垂直的还是不会弄。
把mode改成mode: "vertical"还是不行
我不是用table,用的是li
也没成功哦/麻烦lz帮帮忙!


 回复 引用 查看   
#92楼[楼主] 2011-02-05 23:24 cloudgamer      
@7788ok
具体我也不清楚

 回复 引用   
#93楼 2011-02-23 11:19 路过1111[未注册用户]
太强了
 回复 引用 查看   
#94楼 2011-05-10 16:50 飘渺随风      
强,真强,佩服死了

 回复 引用   
#95楼 2011-05-24 13:45 Regmach[未注册用户]
请问楼主,怎样修改成以DIV为容器? 谢谢
 回复 引用   
#96楼 2011-05-24 14:39 liuzc[未注册用户]
您好,您这个与mootools是否有冲突呢?我在shopex系统里使用这个的时候导致页面js错误!
 回复 引用   
#97楼 2011-05-30 15:10 瞌睡的猫[未注册用户]
不好意思,如果用<ul><li>这么实现效果啊??我想改成垂直的,貌似不好改,楼主有什么方法???
 回复 引用 查看   
#98楼[楼主] 2011-05-30 22:30 cloudgamer      
@Regmach
参考实例吧

 回复 引用 查看   
#99楼[楼主] 2011-05-30 22:30 cloudgamer      
@飘渺随风
@路过1111
谢谢支持

 回复 引用 查看   
#100楼[楼主] 2011-05-30 22:30 cloudgamer      
@瞌睡的猫
自己试试吧

 回复 引用 查看   
#101楼[楼主] 2011-05-30 22:30 cloudgamer      
@liuzc
你可以检测一下

 回复 引用 查看   
#102楼 2011-06-09 14:16 xia,oYe!      
顶楼主,我跟楼主一样也很喜欢美女。
很实用的脚本,谢谢楼主
 回复 引用 查看   
#104楼 2011-08-24 11:46 〤‵坠落者...      
引用飘渺随风:强,真强,佩服死了

支持~

 回复 引用   
#105楼 2011-08-26 11:57 kongs[未注册用户]
我尝试改成JSF,但好像识别不了,主要是图片路径的“_lazysrc”出问题。。。有没解决方法?
 回复 引用   
#106楼 2011-08-27 00:08 sam.zeng[未注册用户]
博主您好,如果不用您那个库,用原生的JS写,难吗
 回复 引用 查看   
#107楼 2011-09-09 11:36 jiang_chao      
楼主想问一下img的这个属性_lazysrc能换成src吗?
 回复 引用 查看   
#108楼 2011-09-29 16:23 xu0207wei      
楼主,如果一个网页上有两个,那该怎么做,我弄了半天都没有改好?
 回复 引用 查看   
#109楼 2011-09-29 18:34 xu0207wei      
博主,如果有两个,那把上面的代码复制,那不太多了啊,那如果有二个,三个,那怎么办,请指点
 回复 引用 查看   
#110楼 2011-09-30 07:27 追求理想的蜗牛      
做的好棒 !
 回复 引用   
#111楼 2011-10-14 12:57 昆明手机[未注册用户]
楼主,我看你的源码里只有5张图片,怎么显示会有50张?怎么控制的?
 回复 引用 查看   
#112楼 2011-10-14 12:59 昆明手机      
楼主,我看你的源码里只有5张图片,怎么显示会有50张?怎么控制的?
 回复 引用 查看   
#113楼 2011-10-20 17:50 xu0207wei      
楼主,为什么container:window, 用这个的时候,图片没有_lazysrc这个的时候,怎么也会对这个图片进行预加载?
 回复 引用 查看   
#114楼 2011-11-08 17:53 waiting...      
楼主你好!
我想问一下,我在用您的js时遇到一个问题:
网页内层的滚动条可以正常使用,用浏览器的滚动条的时候没反应
怎么办。。。

 回复 引用 查看   
#115楼 2012-01-06 11:19 roloxa      
good
评论共2页: 上一页 1 2 
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1676904 wm46Zi17otE=