js判断图片是否加载完成

简介: js判断图片是否加载完成


背景

有些时候,我们需要监听图片加载完成之后做某些处理,如以下场景:图片文件太大的时候,从服务器获取加载很慢,会出现长时间图片窗口空白的情况下,那么我们需要给图片增加一个loading状态,提示用户图片正在加载,并且监听图片是否加载完成,当加载完成之后,关闭loading状态。

解决办法

  1. 法一:img的complete属性
<template>
  <img id="imgDom" :src="imgUrl" :loading="imgLoading" />
</template>
<script>
  import { getImgApi } from '@/api/index';
  export default {
    data () {
      return {
        imgUrl: '',
      }
    },
    mounted() {
      this.getImg();
    },
    methods: {
      // 获取图片
      getImg() {
        this.imgLoading = true;
        getImgApi().then((res) => {
          this.imgUrl = res.data;
          // 轮循complete,判断图片是否加载完成
                let timer = setInterval(() => {
                const dom = document.getElementById('imgDom');
                    if(dom.complete) {
                      console.log('图片加载成功')
                      this.imgLoading = false;
                      clearInterval(timer);
                    }
                 }, 50);
        })
      }
    }
  }
</script>
  1. 法二:load事件
    所有浏览器都支持img的load事件
<template>
  <img id="imgDom" :src="imgUrl" :loading="imgLoading" />
</template>
<script>
  import { getImgApi } from '@/api/index';
  export default {
    data () {
      return {
        imgUrl: '',
      }
    },
    mounted() {
      this.getImg();
      const dom = document.getElementById('imgDom');
      // onload监听,判断图片是否加载完成
      dom.onload = function() {
            console.log('图片加载成功');
            this.imgLoading = false;
        }
    },
    methods: {
      // 获取图片
      getImg() {
        this.imgLoading = true;
        getImgApi().then((res) => {
          this.imgUrl = res.data;
        })
      }
    }
  }
</script>
  1. readystatechange事件
    readyState为complete和loaded则表明图片已经加载完毕。测试IE6-IE10支持该事件,其它浏览器不支持。
<template>
  <img id="imgDom" :src="imgUrl" :loading="imgLoading" />
</template>
<script>
  import { getImgApi } from '@/api/index';
  export default {
    data () {
      return {
        imgUrl: '',
      }
    },
    mounted() {
      this.getImg();
      const dom = document.getElementById('imgDom');
      // onreadystatechange监听,判断图片是否加载完成
      dom.onreadystatechange = function() {
        if(dom.readyState=="complete"|| dom.readyState=="loaded"){
                console.log('图片加载成功');
              this.imgLoading = false;
            }
        }
    },
    methods: {
      // 获取图片
      getImg() {
        this.imgLoading = true;
        getImgApi().then((res) => {
          this.imgUrl = res.data;
        })
      }
    }
  }
</script>

文章参考

https://tool.4xseo.com/a/6148.html

目录
相关文章
|
17天前
|
前端开发 JavaScript
杨老师课堂之JavaScript案例手动切换轮播图片
杨老师课堂之JavaScript案例手动切换轮播图片
14 2
|
17天前
|
前端开发 JavaScript
杨老师课堂之JavaScript案例之自动切换轮播图片
杨老师课堂之JavaScript案例之自动切换轮播图片
13 1
|
20天前
|
Web App开发 JavaScript 前端开发
使用 JS 实现在浏览器控制台打印图片 console.image()
在前端开发过程中,调试的时候,我们会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。 虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个 console.image() 呢?
28 1
使用 JS 实现在浏览器控制台打印图片 console.image()
|
1月前
|
JavaScript 前端开发 安全
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印 1. 信息标识: 水印可以用于标识文档的所有者、保密级别、状态或其他相关信息,帮助用户更好地理解文档内容的属性。 2. 版权保护: 在文档中添加水印可以帮助保护内容的版权,防止他人未经授权地复制、转载或篡改内容。 3. 安全保护: 对于敏感信息或机密文档,添加水印可以帮助防止信息泄露,提高文档的安全性。 4. 提升专业性: 在一些场景下,如商业报告、合同文件等,添加水印可以增加文档的专业性和正式性。 5. 防止截屏或拷贝: 在网页中添加水印可以防止用户通过截屏或复制粘贴等方式非法获取文档内容。
26 1
80 行 JS 代码实现页面添加水印:文字水印、多行文字水印、图片水印、文字&图片水印
|
17天前
|
前端开发 JavaScript
杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播
杨校老师课堂之JavaScript案例之跑马灯左右无缝连接图片自动轮播
12 2
|
2天前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的图片推荐系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的图片推荐系统附带文章源码部署视频讲解等
7 0
|
3天前
|
JavaScript
js 滚动鼠标滑轮放大缩小图片
js 滚动鼠标滑轮放大缩小图片
5 0
|
3天前
|
前端开发 JavaScript
js 打开资源管理器(经典范例:纯前端选择并预览图片)
js 打开资源管理器(经典范例:纯前端选择并预览图片)
14 0
|
3天前
命令行加载特效 【cli-spinner.js】 实用教程
命令行加载特效 【cli-spinner.js】 实用教程
3 0
|
5天前
|
JavaScript 前端开发
前端 JS 经典:统一 Vite 中图片转换逻辑
前端 JS 经典:统一 Vite 中图片转换逻辑
7 0