React图片懒加载

React图片懒加载话不多说了,创建一个LazyLoad.js的React组件,然后将下面的代码复制过去:importReactfrom’react’//import’./lazyload.css’//thresholdconstthreshold=[0.01]classLazyLoadextendsReact.Component{construc…

大家好,又见面了,我是你们的朋友全栈君。

React图片懒加载
  • 话不多说了,创建一个LazyLoad.js的React组件,然后将下面的代码复制过去:
import React from 'react'
// import './lazyload.css'
// threshold
const threshold = [0.01]
class LazyLoad extends React.Component{ 

constructor(props){ 

super(props)
this.state = { 

io: null,
refs: null,
images: null,
loading: true
}
this.handleonload = this.handleonload.bind(this)
}
UNSAFE_componentWillMount(){ 

var { 
ImgClassName, src, alt, ImgStyle } = this.props.state
ImgClassName = ImgClassName ? ImgClassName : 'lazyload-img'
alt = alt ? alt : 'antd-lazyload'
var images = []
var refs = []
const ref = React.createRef()
refs.push(ref)
images.push(
<img className={ 
ImgClassName} ref={ 
ref} data-src={ 
src} alt={ 
alt} style={ 
{ 
...ImgStyle}} />
)
this.setState({ 

refs,
images
})
}
componentDidMount(){ 

const io = new IntersectionObserver(entries=>{ 

entries.forEach(item=>{ 

if(item.intersectionRatio <= 0) return
var { 
 src } = this.props.state
const { 
 target } = item
var image = new Image()
image.src = src
image.onload = ()=>{ 

this.setState({ 
 loading: false })
target.src = target.dataset.src
}
})
},{ 

threshold
})
this.setState({ 
 io })
}
handleonload(){ 

var { 
 io, refs } = this.state
refs.forEach(item=>{ 

io.observe(item.current)
})
}
render(){ 

var { 
 BoxClassName, width, height, BoxStyle } = this.props.state
BoxClassName = BoxClassName ? BoxClassName : 'lazyload-img-box'
var { 
 images } = this.state
return (
<div className={ 
BoxClassName} style={ 
{ 
width, height, ...BoxStyle}}>
{ 
images}
<img onError={ 
this.handleonload} src='' alt='antd-lazyload' style={ 
{ 
display: 'none'}} />
</div>
)
}
}
export default LazyLoad
  • 使用的时候,像这样:
<LazyLoad 
state={ 
{ 

src: 'http://example.com/1.jpg',
alt; '1.jpg',
BoxClassName: 'lazyload-box', // 这是容器的类名
ImgClassName: 'lazyload-img' // 这是img的类名
}}
></LazyLoad>
  • 想知道更多使用请点击这里
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125903.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • idea激活码2019_通用破解码

    idea激活码2019_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • stm32 SWD调试接口的使用

    stm32 SWD调试接口的使用SWD和传统的调试方式区别   1.SWD模式比JTAG在高速模式下面更加可靠。在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持。所以推荐大家使用这个模式。   2.在大家GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的…

  • 软件架构学习小结

    软件架构学习小结

    2021年11月15日
  • 【转载】IIS与asp.net管道

    【转载】IIS与asp.net管道

    2021年11月21日
  • css中绝对定位_绝对定位和相对定位怎么用

    css中绝对定位_绝对定位和相对定位怎么用文章目录相对定位position:relative;特性用途绝对定位position:absolute;绝对定位参考点单独盒子绝对定位参考点:父辈元素设置了相对定位,则子元素绝对定位以父辈元素为参考点。绝对定位水平居中固定定位参考点相对定位position:relative; &lt;styletype="text/css"&gt; .box1{ width:200p…

    2022年10月27日
  • CSDN社区_毒APP公告

    CSDN社区_毒APP公告用户为本,让用户成为CSDN产品的主人,为此,我们特开设了CSDN产品公告栏,切实听取大家对新功能的反馈,定期抽取部分反馈用户赠送精美礼品一份!在过去一周,CSDN研发团队又上线了哪些功能呢?让我一起看下:CSDNAPP发布最新版,新增大厂在线刷题功能CSDN博主排名更新,原创优质博文更容易得到曝光MD编辑器优化操作更便捷更加极客酷炫的博客皮肤3.0上线绑定脉脉即可获得专属勋…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号