圖片預載入
圖片預載入就是在頁面真正渲染一張圖片時,先模擬一個圖片(new Image()),讓它去伺服器請求要載入的圖片路徑,請求完成之後把路徑給真正html頁面上的圖片的src路徑;然後再把新建立的圖片清除了(形象點說:那個新建立的圖片相當於一個跑腿小弟,辦完事之後就被殺了,hahhahah~~~)
let realSrc = ele.getAttribute('realSrc');
let temp = new Image();
temp.src = realSrc;
temp.onload = function () {
ele.src = realSrc;
}
temp = null;
複製程式碼
圖片懶載入
在瀏覽器渲染圖片頁面之前先用一個預設的圖片代替,當那個圖片顯示到頁面某個位置的時候再換成真正的圖片
//圖片露出一半的時候,把圖片地址換成真實地址,顯示真實圖片,其他時候顯示預設圖片
function loadImg(ele) {
if (ele.flag) return;
let scT = document.documentElement.scrollTop || document.body.scrollTop; //捲去的高度
let wH = winH().h; //一螢幕路的高度
let t = offset(ele).t; //當前元素到body 的偏移量
let h = ele.clientHeight
if (scT + wH > t + h / 2) {
//說明圖片露出一半
console.log(666)
ele.flag = true;
// ele.src = '1.jpg';
//圖片預載入
let temp = new Image();
temp.src ='1.jpg';
temp.onload = function () {
//這張圖片載入完成之後會觸發該函式
ele.src = temp.src;
fadeIn(ele);//執行圖片漸現效果
temp = null;
}
}
}
//讓圖片慢慢的顯示出來 ,也就是控制透明度
function fadeIn(ele) {
//讓圖片的opacity從0到1;
//you are the shadow to my lift
ele.style.opacity = 0;
let n = 0;
ele.timer = setInterval(() => {
n += 0.01;
if (n >= 1) {
clearInterval(ele.timer);
}
ele.style.opacity = n;
}, 100);
}
複製程式碼
小demo:瀑布流
思想:
1、獲取資料 封裝成一個函式,去實現獲取資料的操作
2、渲染資料 把從後臺獲取到的資料展示頁面上,按照列來展示的,
迴圈後臺給的陣列, 然後把每一條資料拼接好,新增到長度最小的那一列
這裡封裝了一個獲取長度最小的列的方法 getMinLi
把元素集合轉成陣列, 然後按照 clientHeight 進行排序,由此找到最低的哪個li;
3、滾動載入更多,長度最小的哪個li的底部露出來時,我們就去載入新的資料;
loadMore方式 一次性請求多次 我們做了一個flag的判斷;只有當flag為false的時候,
才去執行新資料的請求,當請求開始的時候
我們把flag置為true,渲染成功 我們把flag再置為false;
4、再加上圖片懶載入的操作;loadImg loadAll
懶載入 就是當圖片還沒有出現到可視視窗的時候,不去載入圖片,
只有當圖片露出來的時候 我們再去載入真正的圖片
預載入 就是 當圖片要展示成真正的圖片時, 先用預設圖展示,
然後再利用JS建立一個臨時的圖片,讓這張臨時的
圖片去遠端請求 真正的圖片, 當請求成功之後,
再把這個真實圖片的地址賦給頁面上的哪個img標籤
5、實現圖片的漸顯 fadeIn 利用定時器 對img進行 opacity的累加操作;
複製程式碼