中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue如何實現圖片懶加載

發布時間:2022-03-11 11:19:17 來源:億速云 閱讀:715 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關vue如何實現圖片懶加載,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

圖片懶加載

圖片懶加載就是對于有很多圖片的頁面,為了提高頁面加載速度,只加載可視區域內的圖片,可視區域外的等到滾動到可視區域后再去加載

這個功能一些 UI 框架都有自帶的,如果沒有呢?

推薦一個第三方插件 vue-lazyload

npm i vue-lazyload -S

// main.js
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload)

// 接著就可以在頁面中使用 v-lazy 懶加載圖片了
<img v-lazy="/static/images/1.png">

或者自己造輪子,手動封裝一個自定義指令,這里封裝好了一個兼容各瀏覽器的版本的,主要是判斷瀏覽器支不支持 IntersectionObserver API,支持就用它實現懶加載,不支持就用監聽 scroll 事件+節流的方式實現

const LazyLoad = { 
// install方法 
install(Vue, options) {  
 const defaultSrc = options.default 
 Vue.directive('lazy', {  
  bind(el, binding) {   
   LazyLoad.init(el, binding.value, defaultSrc) 
 },   
  inserted(el) {     
   if (IntersectionObserver) {    
    LazyLoad.observe(el)     
  } else {      
    LazyLoad.listenerScroll(el)    
  }  
 }, 
})
}, 
// 初始化 
init(el, val, def) { 
 el.setAttribute('data-src', val)  
 el.setAttribute('src', def)
}, 
// 利用IntersectionObserver監聽el
observe(el) {  
 var io = new IntersectionObserver((entries) => {  
  const realSrc = el.dataset.src    
 if (entries[0].isIntersecting) {   
  if (realSrc) {      
   el.src = realSrc       
   el.removeAttribute('data-src')    
  }   
 } 
}) 
 io.observe(el)
}, 
// 監聽scroll事件
listenerScroll(el) {  
 const handler =
LazyLoad.throttle(LazyLoad.load, 300) 
 LazyLoad.load(el)  
 window.addEventListener('scroll', () => {   
  handler(el) 
 })
}, 
// 加載真實圖片 
load(el) {  
 const windowHeight =
document.documentElement.clientHeight
 const elTop = el.getBoundingClientRect().top  
 const elBtm = 
el.getBoundingClientRect().bottom 
 const realSrc = el.dataset.src  
 if (elTop - windowHeight < 0 && elBtm > 0) {  
  if (realSrc) {     
   el.src = realSrc    
   el.removeAttribute('data-src')  
  } 
 }
}, 
// 節流 
throttle(fn, delay) {  
 let timer  
 let prevTime  
 return function (...args) {   
  const currTime = Date.now() 
  const context = this    
  if (!prevTime) prevTime = currTime  
  clearTimeout(timer)   
  
  if (currTime - prevTime > delay) {     
   prevTime = currTime      
   fn.apply(context, args)    
   clearTimeout(timer)      
   return   
 }  

 timer = setTimeout(function () {   
  prevTime = Date.now()  
  timer = null   
  fn.apply(context, args)   
}, delay) 
}
},
}
export default LazyLoad

使用上是這樣的,用 v-LazyLoad 代替 src

<img v-LazyLoad="xxx.jpg" />

關于“vue如何實現圖片懶加載”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

西和县| 井研县| 扎赉特旗| 封开县| 湖南省| 阜新市| 固原市| 雷山县| 乌拉特中旗| 芷江| 文登市| 张北县| 勃利县| 久治县| 青冈县| 惠州市| 卢氏县| 平原县| 沭阳县| 平陆县| 西盟| 图木舒克市| 梅河口市| 海门市| 波密县| 九寨沟县| 枣阳市| 乌兰察布市| 石景山区| 府谷县| 聊城市| SHOW| 乐昌市| 松江区| 宁明县| 穆棱市| 百色市| 巧家县| 康平县| 兴化市| 黄山市|