淘宝首页图片加载技术
来源:互联网 发布:网络棋牌游戏充值 编辑:程序博客网 时间:2024/04/30 08:38
最近开发一个项目,要实现淘宝网首页图片加载类似的效果,就把淘宝源码拿下来分析了一下,淘宝的这个功能确实值得很不错,不但减轻了服务器压力还提高了用户体验。分析了一下 核心代码:
script type="text/javascript">
srcname = "drc";
function addEvent(a,b,c){b=b.replace(/^on/i,"");a=document.getElementById(a)||a;if(a.addEventListener){a.addEventListener(b,c,false)}else{if(a.attachEvent){a.attachEvent("on"+b,c)}}return a}var delayload=function(){this.opsachr=function(){var c=0,a=0,b=0;if(/opera//(/d+/./d)/i.test(navigator.userAgent)){c=parseFloat(RegExp["/x241"])}if((/(/d+/./d)(/./d)?/s+safari/i.test(navigator.userAgent)&&!/chrome/i.test(navigator.userAgent))){a=parseFloat(RegExp["/x241"])}if(/chrome//(/d+/./d)/i.test(navigator.userAgent)){b=parseFloat(RegExp["/x241"])}return(a||b)};this.getId=function(a){return document.getElementById(a)};this.init=function(){this.nodename="img";this.nodeattr=srcname};this.getNextNode=function(){var b=this.nodename;var a=this.nodeattr;var d=document.getElementsByTagName(b);for(var c=0;c<d.length;c++){if(d[c].getAttribute(a)){return d[c]}}return null};this.delayLoader=function(c){var g=this,f;var e,i,d,b;if(/opera//(/d+/./d)/i.test(navigator.userAgent)){f=parseFloat(RegExp["/x241"])}if(g.opsachr()){e=window.innerHeight;i=document.body.scrollTop}else{if(f){e=document.body.clientHeight;i=document.body.scrollTop}else{e=document.documentElement.clientHeight;i=document.documentElement.scrollTop}}d=e+i+400;b=g.getNextNode();if(b==null){g.delayLoader=function(){};return}if(d>=g.getOffsetTop(b)){var a=b.getAttribute(srcname);b.setAttribute("src",a);b.removeAttribute(srcname)}else{return}var h=this;if(c){setTimeout(function(){h.delayLoader(true)},100)}};this.getOffsetTop=function(c){var b=0;var a=c;while(a!=null&&a!=document.body){b+=a.offsetTop;a=a.offsetParent}return b};this.bindUI=function(){var a=this;addEvent(window,"scroll",function(){a.delayLoader(1)});addEvent(window,"resize",function(){a.delayLoader(1)})}};addEvent(window,"load",function(b){var a=new delayload();a.init();a.delayLoader(1);a.bindUI()});
</script>
使用的时候要注意一下,这里不是<img src=""> 而是
<img drc="" />
测试代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<script>
srcname = "drc";
function addEvent(a,b,c){b=b.replace(/^on/i,"");a=document.getElementById(a)||a;if(a.addEventListener){a.addEventListener(b,c,false)}else{if(a.attachEvent){a.attachEvent("on"+b,c)}}return a}var delayload=function(){this.opsachr=function(){var c=0,a=0,b=0;if(/opera//(/d+/./d)/i.test(navigator.userAgent)){c=parseFloat(RegExp["/x241"])}if((/(/d+/./d)(/./d)?/s+safari/i.test(navigator.userAgent)&&!/chrome/i.test(navigator.userAgent))){a=parseFloat(RegExp["/x241"])}if(/chrome//(/d+/./d)/i.test(navigator.userAgent)){b=parseFloat(RegExp["/x241"])}return(a||b)};this.getId=function(a){return document.getElementById(a)};this.init=function(){this.nodename="img";this.nodeattr=srcname};this.getNextNode=function(){var b=this.nodename;var a=this.nodeattr;var d=document.getElementsByTagName(b);for(var c=0;c<d.length;c++){if(d[c].getAttribute(a)){return d[c]}}return null};this.delayLoader=function(c){var g=this,f;var e,i,d,b;if(/opera//(/d+/./d)/i.test(navigator.userAgent)){f=parseFloat(RegExp["/x241"])}if(g.opsachr()){e=window.innerHeight;i=document.body.scrollTop}else{if(f){e=document.body.clientHeight;i=document.body.scrollTop}else{e=document.documentElement.clientHeight;i=document.documentElement.scrollTop}}d=e+i+400;b=g.getNextNode();if(b==null){g.delayLoader=function(){};return}if(d>=g.getOffsetTop(b)){var a=b.getAttribute(srcname);b.setAttribute("src",a);b.removeAttribute(srcname)}else{return}var h=this;if(c){setTimeout(function(){h.delayLoader(true)},100)}};this.getOffsetTop=function(c){var b=0;var a=c;while(a!=null&&a!=document.body){b+=a.offsetTop;a=a.offsetParent}return b};this.bindUI=function(){var a=this;addEvent(window,"scroll",function(){a.delayLoader(1)});addEvent(window,"resize",function(){a.delayLoader(1)})}};addEvent(window,"load",function(b){var a=new delayload();a.init();a.delayLoader(1);a.bindUI()});
</script>
//这个地方图片最好用远程的 还要多加几张 效果更明显
<img drc="http://pic.u69cn.com/Upload/pro/11885_m.jpg"/>
<img drc="http://pic.u69cn.com/Upload/pro/11885_m.jpg"/>
<img drc="http://pic.u69cn.com/Upload/pro/11885_m.jpg"/>
<img drc="http://pic.u69cn.com/Upload/pro/11885_m.jpg"/>
<img drc="http://pic.u69cn.com/Upload/pro/11885_m.jpg"/>
</body>
</html>
- 淘宝首页图片加载技术
- 浅析淘宝首页菜单加载
- 延时加载技术-----仿照手机淘宝网站图片延时加载
- 0065-淘宝网首页图片浮动代码
- 名站技术分析 — 浅谈tudou.com首页图片延迟加载的效果
- 名站技术分析 - 浅谈tudou.com首页图片延迟加载的效果
- RecyclerView加载多类型item 实现淘宝首页布局
- 从PHP到Node,聊一聊淘宝首页背后的技术
- js 仿淘宝首页最新图片幻灯切换效果
- 仿淘宝、京东首页图片广告垂直滑动
- 土豆首页图片延迟加载的效果
- 加载首页图片出现内存溢出
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 【Android】首页图片轮播效果(淘宝、京东首页广告效果)
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 安卓首页图片轮播效果(淘宝、京东首页广告效果)
- 普通用户下执行inb(),out()函数
- 目标:巨人网络!
- project 任务的父节点“完成百分比”不更新问题
- 文通a6扫描类,一代证,驾照,回乡证,护照,军官证等的识别
- POI导出EXCEL经典实现
- 淘宝首页图片加载技术
- What I have done as a DBA
- outlook2007 忘写主题 提示
- 我的9年IT路
- MPLS VPN技术原理 上
- 字符串比较函数
- C2512: no appropriate default constructor availabl
- action中bean不初始化的原因
- Spring.NET1.2+Nhiberate1.2在使用GridView中碰到的几个问题