鍍金池/ 問答/HTML/ vue中如何監(jiān)聽圖片是否加載完成

vue中如何監(jiān)聽圖片是否加載完成

問題描述

這是一個子組件 實現的功能是輪播圖

我在mounted組件里延遲20毫秒去初始化某些動作但初始化動作的前提要求下是第一張圖片已經加載完成了。
現在的問題是圖片還沒加載完成就執(zhí)行了setTimeout

相關代碼

這是一個子組件

<template>
  <div class="slider" ref="slider">
      <div class="slider-group" ref="sliderGroup">
          <div class="slider-item" v-for="(item,index) in list" :key="index" >
              <a @click.stop="item.onClick">
                  <img :src="item.img" :alt="item.img" :style="`width:${width}`" ref="sliderItemImg">
              </a>
          </div>
      </div>
     <div class="dots" v-if="this.dots">
          <span :class="`dot ${index === currentPageIndex ? 'active' :'' }`" v-for="(item,index) in list.length" :key="index"></span>
      </div>
  </div>
</template>
<script>
import BScroll from "better-scroll";
export default {
  props: {
    // 圖片寬度
    width: {
      type: String,
      default: "100%"
    },
    // 數據列表
    list: {
      type: Array,
      default: []
    },
    // 循環(huán)輪播
    loop: {
      type: Boolean,
      default: true
    },
    // 是否自動輪播
    autoPlay: {
      type: Boolean,
      default: true
    },
    // 輪播間隔
    speed: {
      type: Number,
      default: 3000
    },
    // 是否需要 dots
    dots: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      currentPageIndex: 0,
      _slider: null,
      _timer: null
    };
  },
  mounted() {
    const _this = this;
    _this.tmpTimer = setTimeout(() => {
         console.log()
    }, 20);
  },

嘗試過的解決方案:

1、加大setTimeout時間(不夠智能)
2、<img :src="item.img" :alt="item.img" :style="width:${width}" ref="sliderItemImg" @onload="function"> 給img屬性加上onload事件 無效沒有執(zhí)行綁定的function

期待結果

因為list 是個數組里面存儲的可能是多張圖 , 如何能夠在第一張圖加載完成之后再去初始化動作

回答
編輯回答
熊出沒

new Image()的onload方法里面就是加載完成

2018年1月6日 12:54
編輯回答
尐潴豬

可以考慮用指令啊,在inserted的時候去重新新建一個img,讓其src等于該img的src,再監(jiān)聽新的img的onload事件

directives : {
   loadimg (el,binding,vnode){
      //el就是img
      let src = el.src
      let newImg = new Image()
      newImg.src = src
      newImg.onload = function(){
         //doSomething
         
      }
   }
}
2017年8月10日 03:55
編輯回答
脾氣硬

如果只是確定第一張圖片加載完成的話,可以使用Image對象去做,下面是偽代碼

let firstImg = new Image();
firstImg.onload = function() {
 // 做初始化動作
}
firstImg.src = list[0].img
2018年3月31日 11:56