溫馨提示×

溫馨提示×

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

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

如何基于JavaScript判斷圖片是否加載完成

發(fā)布時間:2020-10-24 17:49:41 來源:腳本之家 閱讀:232 作者:前端日記本 欄目:web開發(fā)

這篇文章主要介紹了如何基于JavaScript判斷圖片是否加載完成,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下


這里我用了一個tag來判斷顯示哪個樣式,但是tag是寫在了setTimeOut里面的,是一個延時函數(shù),異步的操作。延時300ms的目的就是為了等待圖片加載出來,但是當(dāng)網(wǎng)絡(luò)慢的時候是滿足不了的。網(wǎng)絡(luò)慢圖片沒有加載出來300ms之后就會直接走入false,會提示用戶重新獲取圖片,但其實圖片已經(jīng)返回回來了。

所以這樣的做法是很不靈活的。

剛開始的代碼如下:

html:

<div v-if="!it.sealTag"><br>  <img :src="it.style"><br></div><br><div v-if="it.sealTag && it.isSys" >
  <p >圖片丟失,請點擊<span @click="resetSign()">重新生成</span></p>
</div>js

js修改前:

this.list = res.data;
this.list.forEach((it) => {
  it.style = catUrl()+'seal/pic/' + it.sealPath;
  //判斷sealpath能不能使用
  let ImgObj = new Image(); //判斷圖片是否存在 
  ImgObj.src = catUrl()+'seal/pic/' + it.sealPath;
  setTimeout(()=>{
    if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) {
      //false:sealpath不可用,true:sealPath可用
      this.$set(it,'sealTag',true);
     } else { 
      this.sealId = it.id;
      this.$set(it,'sealTag',false);
   }
},300)});

不能用setTimeOut()的原因是,網(wǎng)絡(luò)慢的時候圖片沒有加載出來,ImgObj.fileSize,ImgObj.width,ImgObj.height這些都不存在,就返回到false。而等圖片加載出來的時候,vue頁面早就渲染完了。

解決辦法

此時用img的onload方法判斷圖片是否已經(jīng)加載完成。

js修改后:

this.list = res.data;
this.list.forEach((it) => {
//判斷sealpath能不能使用
let ImgObj = new Image(); 
//判斷圖片是否存在 
ImgObj.onload = () => {
  if (ImgObj.fileSize > 0 || (ImgObj.width > 0 && ImgObj.height > 0)) { // 判斷圖片的sealpath能不能正常顯示圖片
  // sealTag:false 不顯示 重新生成 的提示
  this.$set(it,'sealTag',false);
  }
}
// sealTag:true 要顯示 重新生成 的提示
 ImgObj.onerror = () => {
  this.sealId = it.id;
  this.$set(it,'sealTag',true);
 }
  it.style = catUrl()+'seal/pic/' + it.sealPath;
  ImgObj.src = catUrl()+'seal/pic/' + it.sealPath;
});

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI