账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue中如何监听图片是否加载完成
    35
    0

    问题描述

    这是一个子组件 实现的功能是轮播图

    我在mounted组件里延迟20毫秒去初始化某些动作但初始化动作的前提要求下是第一张图片已经加载完成了。
    现在的问题是图片还没加载完成就执行了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: []
        },
        // 循环轮播
        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事件 无效没有执行绑定的function

    期待结果

    因为list 是个数组里面存储的可能是多张图 , 如何能够在第一张图加载完成之后再去初始化动作

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 名字什么不重要 普通会员 1楼

      在Vue中,你可以使用async/await语法来监听图片是否加载完成。以下是一个简单的示例:

      ```javascript import Vue from 'vue' import axios from 'axios'

      export default { data() { return { imageLoad: false } }, mounted() { this.$axios.get('/your-image-url') .then(response => { this.imageLoad = true }) .catch(error => { this.imageLoad = false }) } } ```

      在这个示例中,我们首先导入了Vue和axios模块。然后,我们定义了一个数据属性imageLoad,初始值为false。

      在mounted生命周期钩子中,我们使用$axios.get方法发送一个GET请求到指定的URL。这个请求的then方法中,我们检查请求是否成功。如果请求成功,我们就将imageLoad属性设置为true。如果请求失败,我们就将imageLoad属性设置为false。

      这个方法将在图片加载完成后立即触发,因为Vue的mounted生命周期钩子会在图片加载完成之前就开始执行。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部