delayload组件

组件说明:

该脚本可以动态加载第二屏幕以下的图片,即随用户滚动页面的时候加载图片类似jQuery的lazyLoad插件,较之lazyLoad,delayImage的优点为:不单单可以动态加载图片img,还可以加载背景图片、滚动到某个dom的时候执行绑定该dom的事件,只加载视窗内的图片(如快速拉到第三屏,第二屏的图片是不会加载的)。不会出现图片已经加载完了然后才运行lazyLoad的情况。缺点为:必须手动对每个需要动态加载的对象添加一个属性delayLoad,当然,也可以改成自动检测图片然后动态加载,但如果那样的话,就跟lazyLoad插件一样了

使用方法:

1、准备

必须把该脚本放在页面底部,也可以延迟加载。

 
http://ossweb-img.qq.com/images/js/comm/delayImage.min.js

2、图片

 
<img src="javascript:" height="119" width="100">

为啥把src写成“javascript:”,而不是about:blank或空,或空白图片占位符,可以自己去研究...

3、背景

1)在需要动态加载的block标签上,添加delayLoad属性,该属性值为需要加载的背景的图片路径,当然,需要加载背景的对象必须是有尺寸大小,不然体验不佳:

 
<div delayload="http://ossweb-img.qq.com/images/qqgame/act/20100827seventh/i_pic_01.jpg" style="height: 119px;"></div>

1)在需要动态加载的div上,添加delayLoad属性,该属性值为需要加载的背景的图片路径,当然,需要加载背景的对象必须是有尺寸大小的,不然体验不佳:

 
 
.b1{height:119px;background-position:0 0;background-repeat:no-repeat}
.d1{background-image:url(http://ossweb-img.qq.com/images/qqgame/act/20100827seventh/i_pic_01.jpg)}
 
<div delayload="d1" class="b1"></div>

4、事件

把需要滚动执行的方法(函数)名挂在dom上,滚动到该dom节点的时候,会执行该方法,例如:

 
<div id="iframeWrap" delayload="loadIframe()"></div>
 
 
 
 
function loadIframe(){
    var o=document.getElementById('iframeWrap');
    o.innerHTML='<iframe allowtransparency="true" src="http://cf.qq.com/web200905/inc/ifr_shop_new.htm" frameborder="0" height="170" scrolling="no" width="202"></iframe>';   
}

关于milo版本

JS调用方法

需要引入milo

 
http://ossweb-img.qq.com/images/js/milo/milo-min.js
 
need(["biz.delayLoad"]);

milo版本新增功能说明

一、分解了主函数,对部分逻辑进行调整,加快了默认可视范围的显示/执行速度(无需进入队列循环直接执行)

二、新增了一个对外接口lazyLoad(ele/*需要延迟加载的DOM对象*/,fn/*需要延迟加载绑定到DOM上的方法*/),利用这个接口,可以实现:

调用方法:

 
<div delayload="test()" id="testIframe"></div>
 
 
 
 
 
 
 
 
 
 
 
 
function test(){
    var o=document.getElementById('testIframe');
    o.innerHTML='hi...';
}
 
 need(["biz.delayLoad-min"],function(D){
   var imgs = document.images,l = imgs.length;
   for(var i=0;i < l;i++){
       D.lazyLoad(imgs[i],function(){this.style.border = "1px solid #f00";});//注意:调用方式为d.lazyLoad(ele,function(){}/*fn name*/)
   }
   D.lazyLoad(g("testIframe"),test);
   //或者:D.lazyLoad(g("testIframe"),function(){this.innerHTML='.............';});
});

demo;