最近博客写道项目列表中,发现这里比较多图片,一开加载会比较慢,然后就想要用一个loading的图片来占位。与此同时,如果图片加载失败那么显示错误的图片,不显示一个原有的错误,那样比较难看。

效果

原理解析

这个就是一个组件,一个图片展示的组件,直接更改img标签的url地址就好,对的,是这样的,在vue中直接更改地址,vue会有响应式的更新数据。

图片的事件

图片是有许多的事件的,例如,onload, onerror等,图片只要一加载就会调用onload的事件,不管是加载成功还是加载失败都会调用这个方法。而onerror方法是图片在没有显示出来就会调用这个方法。从这两个方法对比可以得知,我们需要使用onload来一开始加载图片,并且图片可以成功,可以失败等。

组件代码

import { ImgHTMLAttributes } from "react";/*** 图片占位组件属性*/
export interface IImagProps<T> extends ImgHTMLAttributes<T> {/*** 加载中的图片*/loadingImg?: string,/*** 失败加载的图片*/errorImg?: string,/*** 图片正常显示的地址*/src: string,
}import React, { useState } from 'react'
// 下面这两个是导入默认的图片
import loadImg from './../../../assets/imgs/loading/load.gif';
import errorImg from './../../../assets/imgs/loading/error.png'
export default function Img(props: IImagProps<any>) {// 图片地址const [src, setSrc] = useState(props.loadingImg as string)// 是否第一次加载,如果不使用这个会加载两次const [isFlag, setIsFlag] = useState(false)/*** 图片加载完成*/const handleOnLoad = () => {// 判断是否第一次加载if (isFlag) return;// 创建一个img标签const imgDom = new Image();imgDom.src = props.src;// 图片加载完成使用正常的图片imgDom.onload = function () {setIsFlag(true)setSrc(props.src)}// 图片加载失败使用图片占位符imgDom.onerror = function () {setIsFlag(true)setSrc(props.errorImg as string)}}return (<><img src={src}onLoad={handleOnLoad}style={{height: 'inherit',}}></img></>)
}
// 设置默认的图片加载中的样式和失败的图片
Img.defaultProps = {loadingImg: loadImg,errorImg: errorImg
}

react 实现图片正在加载中 加载完成 加载失败三个阶段的相关推荐

  1. img加载中显示loading,加载失败显示默认图片(React)

    实现效果 完整代码 import { useRef, useState } from 'react'; import './index.less'; import errorImg from '@/c ...

  2. img加载中显示loading,加载失败隐藏img并显示自定义内容而且可点击重新加载(React)

    图片加载效果 完整代码 import { useRef, useState } from 'react'; import './index.less';export default function ...

  3. mint-ui 图片懒加载及请求数据加载中提示方法

    图片懒加载: 引入需要的文件 <script src="https://unpkg.com/vue-lazyload/vue-lazyload.js"></scr ...

  4. 记录--Vue自定义指令实现加载中效果v-load(不使用Vue.extend)

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 网站效果演示:ashuai.work:8888/#/myLoad GitHub仓库地址代码:github.com/shuirongshu- ...

  5. react 判断图片是否加载完成_如何判断图片(img)是否已经加载成功--基于react...

    我过去经常会问: 有没有一种方法去判断子类组件是否已经渲染完成? 答案当然是有的啦  componentDidMount(),在react component 已经渲染完成时 就会调用 compone ...

  6. react 判断图片是否加载完成_React中型项目的优化实践

    项目介绍 整个项目大概有60+个页面,用到的组件大概150+,package里面的依赖大概有70+个,应该勉强算得上是一个中型的React的项目了. 下面给大家看看我们现在build一次项目的结果-- ...

  7. JQuery AJAX 加载 HTML代码“lt”形式的。怎么解析成形式,并且把img解析成图片输出到浏览器中。...

    声明:此方法目前用火狐通过验证.IE未能通过. 前台 写法:   <div  style="visibility:hidden"  id="Change" ...

  8. 图片在xml文件中直接加载.9文件

    图片在xml文件中直接加载.9文件,可能会因为图片压缩的缘故产生锯齿,如果使用 ImageView imageview = (ImageView) view .findViewById(R.id.in ...

  9. 从UIL库谈Android图片加载中需要注意的事情

    Android Universal Image Loader 算是Android中最流行的图片加载库了,作者Sergey的确牛逼,能将整个Android图片加载的点点滴滴考虑的如此全面.网上研究这个开 ...

  10. android webview 加载图片一直显示正在加载中

    今天无意间发现自己的项目WebView加载时,没有调用到onPageFinished,部分图片一直显示加载中,找了老久不知道出现什么问题~~~ 无奈之下拿出老版本测试,发现加载很正常,只好把代码拿出来 ...

最新文章

  1. 企业网络推广——企业网络推广更注重网站内部链接优化!
  2. 爬取豆瓣电影排名前250部电影并且存入Mongo数据库
  3. Yii::$app的作用
  4. 会议 | 2018年全国知识图谱与语义计算大会(CCKS 2018)
  5. String.valueOf() 和 toString的区别
  6. 用GIF展现程序员的生活二
  7. Spring Boot2.1.5(8)--- 各Starter介绍
  8. TARS 微服务开源生态
  9. java 四舍五入保留小数
  10. SQL数据库连接超时时间已到
  11. (数据结构)二叉树中序遍历
  12. 2022年,在NLP中还有没有比较新的研究方向?
  13. 专题训练二 搜索进阶 HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离)
  14. linux命令行自制屏保,Linux终端界面屏保
  15. 关于SQL_Errno1677导致主从复制中断处理
  16. 地理配准之栅格至栅格
  17. C#:Krypton控件使用方法详解(第一讲) —— kryptonButton
  18. DateAdd 函数
  19. Impala原理简单整理
  20. Guns框架基本介绍、下载、部署

热门文章

  1. 【系统设计】详细设计说明书
  2. 初学者如何在CSDN写博客
  3. 谈谈坚持写博客的感悟
  4. 远程连接端口修改,使用注册表修改
  5. C#正则表达式提取txt小说目录
  6. php10天速成培训,十天学会php之第十天
  7. Nakashima Propeller选择Voltaire加速船舶螺旋桨设计
  8. 假如时光倒流,我会这么学习Java 【转载】
  9. 揭秘《英雄联盟》的游戏自动化测试
  10. 独立团-手游脱机封包辅助课程(完整版)