当前位置: 首页 > wzjs >正文

360免费建站视频网页升级紧急通知通知

360免费建站视频,网页升级紧急通知通知,公司宣传册设计样本免费,做微商网站的软文在前端开发中,当一次性渲染大量数据时,直接渲染所有DOM节点,会造成渲染过慢,浏览器卡顿的现象,导致用户体验不佳,为了改善这种情况,提出使用虚拟列表的方式进行渲染。 虚拟列表的实现思路 1.只渲…

在前端开发中,当一次性渲染大量数据时,直接渲染所有DOM节点,会造成渲染过慢,浏览器卡顿的现象,导致用户体验不佳,为了改善这种情况,提出使用虚拟列表的方式进行渲染。
虚拟列表的实现思路
1.只渲染可见区域:
计算当前可见区域的起始索引和结束索引。
只渲染可见区域内的列表项,其他区域用空白占位。
2.动态计算高度:
如果列表项高度固定,可以直接计算。
如果列表项高度不固定,需要动态计算每个列表项的高度。
3.滚动时更新渲染:
监听滚动事件,动态更新可见区域的列表项。
实现步骤
以下是实现虚拟列表的关键步骤:

  1. 固定高度的虚拟列表
    假设列表项高度固定,实现较为简单。
  2. 动态高度的虚拟列表
    列表项高度不固定,需要动态计算。
    代码实现
    固定高度的虚拟列表
    以下是一个固定高度的虚拟列表实现:
import React, { useState, useRef, useCallback } from "react";const VirtualList = ({ data, itemHeight, visibleCount }) => {const [startIndex, setStartIndex] = useState(0); // 起始索引const containerRef = useRef(null); // 容器引用// 计算可见区域的数据const visibleData = data.slice(startIndex, startIndex + visibleCount);// 处理滚动事件const handleScroll = useCallback(() => {if (containerRef.current) {const scrollTop = containerRef.current.scrollTop;const newStartIndex = Math.floor(scrollTop / itemHeight);setStartIndex(newStartIndex);}}, [itemHeight]);return (<divref={containerRef}style={{height: `${visibleCount * itemHeight}px`,overflow: "auto",border: "1px solid #ccc",}}onScroll={handleScroll}><divstyle={{height: `${data.length * itemHeight}px`,position: "relative",}}>{visibleData.map((item, index) => (<divkey={startIndex + index}style={{position: "absolute",top: `${(startIndex + index) * itemHeight}px`,width: "100%",height: `${itemHeight}px`,boxSizing: "border-box",borderBottom: "1px solid #eee",}}>{item}</div>))}</div></div>);
};export default VirtualList;

使用示例

import React from "react";
import VirtualList from "./VirtualList";const App = () => {const data = Array.from({ length: 10000 }, (_, index) => `Item ${index + 1}`);return (<div><h1>Virtual List Example</h1><VirtualList data={data} itemHeight={50} visibleCount={10} /></div>);
};export default App;

动态高度的虚拟列表
如果列表项高度不固定,需要动态计算高度并缓存。以下是一个简单的实现思路:
初始化时测量高度:
渲染一个隐藏的列表项,测量其高度并缓存。
滚动时动态更新:
根据缓存的高度计算可见区域的起始索引和结束索引。

import React, { useState, useRef, useCallback, useEffect } from "react";const DynamicVirtualList = ({ data, visibleCount }) => {const [startIndex, setStartIndex] = useState(0);const [heights, setHeights] = useState([]); // 缓存高度const containerRef = useRef(null);const itemRefs = useRef([]); // 列表项引用// 初始化时测量高度useEffect(() => {const newHeights = itemRefs.current.map((ref) => ref?.getBoundingClientRect().height || 0);setHeights(newHeights);}, [data]);// 计算可见区域的数据const visibleData = data.slice(startIndex, startIndex + visibleCount);// 计算总高度const totalHeight = heights.reduce((sum, height) => sum + height, 0);// 计算起始偏移量const offset = heights.slice(0, startIndex).reduce((sum, height) => sum + height, 0);// 处理滚动事件const handleScroll = useCallback(() => {if (containerRef.current) {const scrollTop = containerRef.current.scrollTop;let newStartIndex = 0;let sum = 0;while (sum + heights[newStartIndex] < scrollTop) {sum += heights[newStartIndex];newStartIndex++;}setStartIndex(newStartIndex);}}, [heights]);return (<divref={containerRef}style={{height: "500px",overflow: "auto",border: "1px solid #ccc",}}onScroll={handleScroll}><div style={{ height: `${totalHeight}px`, position: "relative" }}>{visibleData.map((item, index) => (<divkey={startIndex + index}ref={(el) => (itemRefs.current[startIndex + index] = el)}style={{position: "absolute",top: `${offset}px`,width: "100%",boxSizing: "border-box",borderBottom: "1px solid #eee",}}>{item}</div>))}</div></div>);
};export default DynamicVirtualList;

使用示例

import React from "react";
import DynamicVirtualList from "./DynamicVirtualList";const App = () => {const data = Array.from({ length: 10000 }, (_, index) => `Item ${index + 1}`);return (<div><h1>Dynamic Virtual List Example</h1><DynamicVirtualList data={data} visibleCount={10} /></div>);
};export default App;
http://www.dtcms.com/wzjs/535714.html

相关文章:

  • 织梦dede网站后台被挂黑链怎么办wordpress 统计小工具
  • 网站建设有什么好建议如何推广网址
  • ps个人网站的首页界面石家庄市住房和城乡建设局官方网站
  • 响应式瀑布流网站程序现在都用什么软件做网站
  • 长沙营销型网站郑州工装定制厂家哪家好
  • 做网站php软件菏泽市城乡和建设局网站
  • 广州市官网网站建设报价做一个手机app大概需要多少钱
  • 网站读取速度慢海淀区手机网站设计服务6
  • 手机开发者网站职场社交网站怎么做
  • 网站开发技术的比较代码判断网站
  • 北京网站设计公司飞沐有网站加金币的做弊器吗
  • 男女做受网站东营会计信息网官网首页
  • 网站这么上百度网站建设一年多少钱
  • 国内美食网站欣赏济南建设网站 概况
  • wordpress批量网站关键词优化排名要怎么做
  • 太原市手机微网站建设建筑木模板报价清单
  • 如何备份一个网站广告传媒公司营业执照经营范围
  • 安徽网站建设流程my域名
  • 教育网站建设规划书国内重大新闻十条
  • 哪些网站适合用自适应职高的电子商务主要学什么
  • 宁波网络建站公司有哪些wordpress 插件选项
  • o2o网站系统建设广东江门最新消息今天
  • 承装承修承试材料在哪个网站做自己做的网站源码如何安装
  • 网站价值评估 php开发公司总经理竞聘报告
  • 建设厅网站账号密码忘记怎么办html代码怎么下载
  • 支付网站开发建设费用怎么入账电信宽带做网站
  • 网站做定向的作用企业应对承包商的施工方案尤其是
  • 廊坊网站建设技术托管w3c网站代码标准规范
  • 免费网站建设ppt上海十大集团
  • 网站seo关键词优化排名刷关键词的平台