<body> <button>加載圖片</button> <img src="test.png" alt="測試" data-original = "test2.png"> <script> var oBtn = document.getElementsByTagName('button')[0]; var oImg = document.images[0]; //延遲加載,給圖片加了 載入事件 function aftLoadImg(obj, url){ var oImg = new Image(); oImg.onload = function(){ obj.src = oImg.src; } oImg.src = url; } oBtn.onclick = function(){ oImg.src = "test2.png"; // 若是圖片不是很大,就直接改一下src就能夠了, for (var pro in oImg.dataset) { //這裏證實,dataset裏面有一個orignial屬性,是test2.png。 document.write(pro + " " +oImg.dataset[pro] + "</br>"); //會打印出 original test2.png } //若是以爲圖片有點大,就直接加載一個事件,上面已經說明過,圖像是有onload事件的,等加載完畢後在顯示。 if(oImg.dataset){ //是否能夠獲取dataset屬性。 aftLoadImg(oImg, oImg.dataset.original); } else{ aftLoadImg(oImg,oImg.getAttribute("data-original")); } } </script> </body>
<script src="jquery.js" type="text/javascript"></script> <script src="jquery.lazyload.js" type="text/javascript"></script>
b. 須要懶加載的圖片, ①.增長 data-original="圖片真實地址"javascript
②.頁面全部的img標籤的src屬性指向同一個圖片(圖片未加載時,顯示的一張臨時圖)css
③.圖片必定要設置 width 與 height html
注意:這點你可能沒辦法接受,由於須要改變你的htmljava
<img src="img/grey.gif" data-original="img/example.jpg" width="640" height="480">
$("img.lazy").lazyload();
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ margin: 0; width: 500px; } ul{ margin: 0; padding: 0; list-style: none; display: block; } img{ border: none; vertical-align: middle; } .in{ border: 1px solid black; margin: 10px; text-align: center; height: 400px; width: 400px; float: left; } .in img{ height: 400px; width: 400px; } </style> </head> <body> <ul class="list"> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/1.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/2.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/3.png"></li> <li class="in"><img src="img/loading.gif" alt="測試" data-original = "img/4.png"></li> </ul> <script> var aImages = document.images; alert(aImages.length); loadImg(aImages); window.onscroll = function(){ loadImg(aImages); }; function loadImg(arr) { for ( var i = 0,len = arr.length; i < len; i++) { // 分別表明該元素上、左、右、下四條邊界相對於瀏覽器窗口左上角(注意,不是文檔區域的左上角)的偏移像素值 if (arr[i].getBoundingClientRect().top < document.documentElement.clientHeight && !arr[i].isLoad) { arr[i].isLoad = true; arr[i].style.cssText = "transition: ''; opacity: 0;"; if (arr[i].dataset) { aftLoadImg(arr[i], arr[i].dataset.original); } else { aftLoadImg(arr[i], arr[i].getAttribute("data-original")); } (function(i){ setTimeout(function(){ arr[i].style.cssText = "transition: 1s; opacity: 1;" //transition CSS3漸變 }, 16); })(i); } } } function aftLoadImg(obj, url){ var oImg = new Image(); oImg.onload = function() { obj.src = oImg.src; } oImg.src = url; } </script> </body> </html>
function getH(obj) { var h = 0; while (obj) { h += obj.offsetTop; obj = obj.offsetParent; } return h; }
//當網頁的滾動條滾動時要時時判斷當前li的位置!jquery
window.onscroll = function () { var oDiv = document.getElementById('listID'); var oUl = oDiv.children[0]; var aLi = oUl.children; for (var i = 0, l = aLi.length; i < l; i++) { var oLi = aLi[i]; //檢查oLi是否在可視區域 var t = document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop); var h = getH(oLi); if (h < t) { setTimeout("setImg(" + i + ")", 500); } } };
//當頁面加載完成之後要主動運行一下window.onscroll,從而得到當前可視範圍內的圖片。瀏覽器
window.onload = function () { window.onscroll(); };