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>
  • 想知道更多使用请点击这里
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个贼简单的代码表白

    一个贼简单的代码表白前一阵网上挺火的各种表白代码,自己学着也做了一个记事本编写,后缀改为vbs就能运行了。(其中有一串代码会关机的呦,我是WIN10系统)setws=createobject(“wscript.shell”)ws.run”cmd.exe/cshutdown-s-f-t0″哈哈知道三号女生是什么梗吗?(来源于文松的一个小品,那个老弟啊姐给你爆灯的那个!!嗯哼)就是…

    2022年5月6日
    48
  • Android ListView禁止滑动

    Android ListView禁止滑动由于数据较少,如果listview滑动感觉不怎么美观,于是想要Listview禁止滑动,其实也很简单,只要拦截listview的Ontouch事件就可以了具体代码如下:`ListViewlv=(ListView)findViewById(R.id.listView);lv.setOnTouchListener(newOnTouchListener(){

    2022年7月22日
    31
  • Java高级工程师常见面试题(一)-Java基础「建议收藏」

    Java高级工程师常见面试题(一)-Java基础「建议收藏」博主其他相关文章:《Java高级工程师常见面试题-总结》1.String类为什么是final的。多线程安全,将字符串对象保存在字符串常量池中共享效率高2.HashMap的源码,实现原理,底层结构。HashMap基于哈希表的Map接口的实现。允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的…

    2022年5月27日
    30
  • cannot find the class file for_canyoufindtina

    cannot find the class file for_canyoufindtina今天第一次使用javah這個命令,一直報"Couldnotfindclassfile"這個錯誤,網上找了很多帖子,都是在說類名前面要加包的名字,還要設置什麼-classpath,最後發現其實這是個很違和的錯誤提示。我們一般會在.java文件所在目錄下用javac產生類文件.class,然後試圖使用javah命令產生c的頭文件.h,這個時候就會報上述錯誤了,即使加了-classpat…

    2022年9月24日
    0
  • 【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法「建议收藏」

    【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法「建议收藏」meshgrid函数用来生成网格矩阵,可以是二维网格矩阵,也可以是三维。对于生成二维网格,用法为:[xy]=meshgrid(ab); %a和b是一维数组,如a=[123];b=[234];则生成的x和y都是二维的矩阵,x的每行都是123,共三行,y每列都是234,共三列。举个实例:Forexample, toevaluateth

    2022年6月12日
    46
  • mongoshake实现mongodb数据同步

    mongoshake实现mongodb数据同步mongoshake实现mongodb数据同步

    2022年6月28日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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