美文网首页
虚拟列表

虚拟列表

作者: 立陶宛_d5a9 | 来源:发表于2021-05-07 07:44 被阅读0次

import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
const list = Array.from({ length: 20000 }, (v, k) => {
return {
i: k,
h: Math.ceil(20 * Math.random()) + 20,
};
});
class App extends Component {
listRow = [];
state = {
top: 0,
bottom: 0,
listRow: [],
list: list,
};
render() {
const offset = 600
const { listRow, top, bottom } = this.state;
return (
<div className="App">
<div
onScroll={(e) => {
const top = e.target.scrollTop;
let _top = 0
let _bottom = 0
const height = 400;
let allH = 0;
for (let index = 0; index < listRow.length; index++) {
const h = listRow[index].height;
allH = allH + h;
if (top < allH + offset && top + height > allH - offset) {
this.listRow[index].flag = false;
} else if (top >= allH + offset){
_top = _top + h
this.listRow[index].flag = true;
} else if (top + height <= allH - offset){
_bottom = _bottom + h
this.listRow[index].flag = true;
}
}
this.setState({
top: _top,
bottom: _bottom,
listRow: this.listRow,
});
}}
style={{ background: "red", height: 400, overflow: "auto" }}
>
<div style={{height: top}}></div>
{list.map((item, index) => {
const flag = listRow[index] ? listRow[index].flag : false;
if (!flag) {
return (
<div
ref={(e) => {
if (!this.listRow[index]) {
this.listRow[index] = {
height: item.h,
};
this.setState({
listRow: this.listRow,
});
}
}}
style={{
height: item.h,
justifyContent: "center",
background: flag ? "blue" : "yellow",
}}
key={index}
>
{item.i}
</div>
);
} else {
return null;
}
})}
<div style={{height: bottom}}></div>
</div>
{/* <p style={{ width: 400 }}>{JSON.stringify(listRow)}</p> */}
</div>
);
}
}

export default App;

相关文章

  • 虚拟列表

    import React, { Component } from "react";import logo from...

  • 虚拟化列表

    虚拟列表使用的场景 虚拟列表是对长列表对一种优化手段,对于一些业务场景,要展示对列表很长,同时不能使用分页对方式,...

  • 长列表优化——虚拟列表

    前言 场景是小程序长列表优化,框架基于mpvue,固定高度。(动态高度暂时先不考虑) 关于recycle-view...

  • 虚拟列表优化

    虚拟列表其实是按需显示的一种实现,即只对可见区域进行渲染,对非可见区域中的数据不渲染或部分渲染的技术,从而达到极高...

  • cocos creator 虚拟列表

    虚拟列表是按需显示的一种技术,可以根据用户的滚动,不必渲染所有列表项,而只是渲染可视区域内的一部分列表元素的技术。...

  • Python基本应用

    用pip安装包: 升级pip 安装VirtualEnv 创建虚拟环境 生成所需的依赖列表: 根据依赖列表文件重新安...

  • Flutter调试

    快速启动虚拟机 快速启动Android虚拟机 1、查找Android SDK安装的位置 2、查看模拟设备列表 3、...

  • elasticsearch集群部署

    服务器配置,三台centos虚拟机,ip列表如下:192.168.65.19192.168.68.56192.16...

  • es集群的搭建

    服务器配置,三台centos虚拟机,ip列表如下:192.168.52.131192.168.52.132192....

  • 虚拟列表监听scroll实现

网友评论

      本文标题:虚拟列表

      本文链接:https://www.haomeiwen.com/subject/blxsdltx.html