js图片实时加载提供网页打开速度
浏览大型网站,特别是图片比较多的图片,如大型的电商网站,你会发现处了第一屏外,往下滚动的时候图片才加载出来,没必要一开始加载就要把全部图片加载出来,这样子打开网面的速度得到了很好提高。以下是笔者目前所想到的思路,如果有更好的思路,望不吝赐教。
其实实时加载图片思路很简单,页面一开始加载的时候把不需要一开始就加载的图片(如第二屏以下的图片,反正是要往下滚动才能看到的,不如把它们设置成往下滚动的时候再实时加载)路径保持到一个自定义的属性里,如:<img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1500594063_1.jpg" alt="19岁女孩直面癌症 7年前曾截肢" />,src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif"是一个1px*1px的透明gif图片,自定义属性data-src里的"http://www.1sohu.com/sp/attachments/allimg/140916/1500594063_1.jpg"才是图片的路径,往下滚动到它的时候把data-src里的值替换掉src的值,然后把data-src属性移除掉……
如下是demo
<!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=utf-8" /> <title>js图片实时加载</title> <style> *{padding:0; margin:0;} .wp{width:1000px; margin:5px auto; padding:10px 0; border-bottom:1px solid #dedede; overflow:hidden;} ul li{ display:block; width:250px; float:left; margin:5px 0; list-style:none;} .aimg{ display:block; height:300px; max-width:348px; border:1px solid #EEE; background:url(http://ctc.qzs.qq.com/aoi/img/icenter/loading.gif) no-repeat center center;} </style> </head> <body> <div class="wp"> <a href="http://www.cnblogs.com/xiaomou2014"><img src="http://www.1sohu.com/sp/attachments/allimg/140916/1500532L1_1.png" alt="xiaomou2014的头像"></a> <a href="http://www.cnblogs.com/xiaomou2014">http://www.cnblogs.com/xiaomou2014</a> cont2开始的图片是实时加载的 </div> <div class="cont1 wp"> <h2>cont1</h2> <ul> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1500532L1_0.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1500464522_1.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1500464522_0.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/15003T2W_1.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/15003T2W_0.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/150032X23_1.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/150032X23_0.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1501161F5_0.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1501161F5_1.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1501223346_0.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/1501223346_1.jpg" /></li> <li><img class="aimg" src="http://www.1sohu.com/sp/attachments/allimg/140916/15012b5J_0.jpg" /></li> </ul> </div> <div class="cont2 wp"> <h2>cont2</h2> <ul> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1500594063_1.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15012b5J_1.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15013A952_0.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15013A952_1.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><a href="http://news.ifeng.com/a/20140909/41906442_0.shtml#p=1" title="7年前截肢的19岁癌症晚期女孩" target="_blank" ><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/150142I29_0.jpg" alt="19岁女孩直面癌症 7年前曾截肢" /></a></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/150142I29_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15014T213_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15014T213_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15015D164_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15015D164_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502031a2_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502031a2_1.jpg" /></li> </ul> </div> <div class="cont3 wp"> <h2>cont3</h2> <ul> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15020b309_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15020b309_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502161350_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502161350_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/150223IK_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/150223IK_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502309411_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502309411_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15023D959_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/15023D959_1.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502434Y2_0.jpg" /></li> <li><img class="aimg" src="http://ctc.qzonestyle.gtimg.cn/ac/b.gif" data-src="http://www.1sohu.com/sp/attachments/allimg/140916/1502434Y2_1.jpg" /></li> </ul> </div> <script> //兼容IE对getElementsByClassName if (navigator.appName == 'Microsoft Internet Explorer') { document.getElementsByClassName = function() { var tTagName = "*"; if (arguments.length > 1) { tTagName = arguments[1]; } if (arguments.length > 2) { var pObj = arguments[2] } else { var pObj = document; } var objArr = pObj.getElementsByTagName(tTagName); var tRObj = new Array(); for ( var i = 0; i < objArr.length; i++) { if (objArr[i].className == arguments[0]) { tRObj.push(objArr[i]); } } return tRObj; } } //图片加载 function loadImg(imgClass,imgSrc){ //data-src:存放需要加载的图片的路径 var arrImg=document.getElementsByClassName(imgClass); //需要实时加载class为imgClass的图片数组 window.onscroll=function(){ for(var i=0; i<arrImg.length; i++){ if(!arrImg[i].getAttribute(imgSrc)) continue; if(document.documentElement.scrollTop+document.body.scrollTop+document.documentElement.clientHeight >arrImg[i].offsetTop){ arrImg[i].setAttribute("src",arrImg[i].getAttribute(imgSrc)); arrImg[i].removeAttribute(imgSrc); } } } } loadImg("aimg","data-src"); </script> </body> </html>