html虛擬滾動,解決dom渲染過多卡頓的問題

在這里插入圖片描述


<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8" /><title>極簡虛擬滾動</title><style>.container {width: 300px;height: 300px;border: 1px solid #ccc;overflow: auto;position: relative;}.placeholder {height: 50000px; /* 假設總高度為1000個item * 50px */}.item {position: absolute;left: 0;top: 0;width: 100%;height: 50px;line-height: 50px;text-align: center;box-sizing: border-box;will-change: transform;}.item:nth-child(odd) {background-color: #00ccff;}.item:nth-child(even) {background-color: #ffcc00;}</style></head><body><div class="container"><div class="placeholder"></div><div class="items-container"></div></div><script>const container = document.querySelector(".container");const itemsContainer = document.querySelector(".items-container");const itemHeight = 50;const visibleCount = Math.ceil(container.clientHeight / itemHeight); // 屏幕能顯示的數量const buffer = 2; // 緩沖行數const totalItems = 1000; // 總數據量function render() {const scrollTop = container.scrollTop;const startIndex = Math.max(0,Math.floor(scrollTop / itemHeight) - buffer);const endIndex = Math.min(totalItems,startIndex + visibleCount + buffer * 2);// 清空當前渲染的內容itemsContainer.innerHTML = "";for (let i = startIndex; i < endIndex; i++) {const item = document.createElement("div");item.className = "item";item.textContent = `Item ${i}`;item.style.transform = `translateY(${i * itemHeight}px)`;itemsContainer.appendChild(item);}}// 初始渲染render();// 監聽滾動事件container.addEventListener("scroll", () => {requestAnimationFrame(render);});</script></body>
</html>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87274.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華銳互動:全方位定制化 VR 內容制作服務流程剖析?

華銳互動始終堅持以客戶為中心&#xff0c;為客戶提供全方位、定制化的 VR 內容制作服務。從項目的最初階段開始&#xff0c;華銳互動就會深入了解客戶的需求和目標&#xff0c;與客戶進行充分的溝通和交流&#xff0c;挖掘項目背后的故事和文化內涵&#xff0c;然后根據客戶的…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | DragNDrop(拖拽占用組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— DragNDrop組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API 和 <script setup> 語法結合…

springboot應用即使使用了連接池,MySQL數據庫仍然有大量sleep狀態的連接

springboot應用即使使用了連接池&#xff0c;MySQL數據庫仍然有大量sleep狀態的連接 問題背景概念理解MySQL配置參數wait_timeout概念Hikari配置參數&#xff08;項目使用hikari作為數據庫連接池&#xff09; 實踐出真知總結和解決思路 問題背景 近期客戶生產環境報&#xff1…

windows下安裝和使用git

本文為windows下git的下載安裝和使用。 git下載和安裝 參考&#xff1a; windows安裝git&#xff08;全網最詳細&#xff0c;保姆教程&#xff09;-CSDN博客 【學了就忘】Git介紹 — 4.Git的安裝 - 簡書 先解決下載時的一些疑惑&#xff1a; 選擇哪個架構&#xff1f; 電腦ARM6…

借助工具給外語視頻加雙語字幕的實用指南?

給外語視頻配上雙語字幕&#xff0c;能讓不同語言背景的觀眾更輕松理解內容&#xff0c;也能讓視頻在傳播時更受歡迎。現在有不少智能工具能幫我們高效完成這項工作&#xff0c;比如 ViiTor AI 平臺&#xff0c;它在處理雙語字幕方面有不少實用功能&#xff0c;下面就結合其功能…

Claude 4 與 Gemini 2.5 Pro:開發者深度比較

Claude 4 與 Gemini 2.5 Pro&#xff1a;開發者深度比較 在使用相同的編碼挑戰對Claude Sonnet 4和Gemini 2.5 Pro Preview進行廣泛的正面測試后&#xff0c;我發現了每個開發人員都應該了解的顯著性能差異。我的發現揭示了執行速度、成本效率以及最重要的&#xff0c;精確執行…

怎么進入9870端口

在實驗時想進入9870端口查看safe狀態 但是輸入localhost:9870后顯示&#xff1a; 首先使用jps確認hadoop狀態&#xff1a; 從 jps 的輸出來看&#xff0c;Hadoop 的核心服務&#xff08;NameNode、DataNode、ResourceManager、NodeManager 等&#xff09;都已經正常運行&…

Windows、Linux、macOS 三大系統安裝 Git 的常見坑點及解決方案,附帶 具體操作示例,幫助新手快速避坑

以下是 Windows、Linux、macOS 三大系統安裝 Git 的常見坑點及解決方案,附帶 具體操作示例,幫助新手快速避坑。 一、Windows 系統安裝 Git 1. 安裝路徑含空格或中文 坑點:默認路徑 C:\Program Files\Git 可能導致某些腳本報錯。 解決:自定義路徑(如 D:\DevTools\Git)。…

OpenAI最新 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 新模型如何在ChatGPT付費創作系統平臺對接API使用

GPT-4.1 ?是 OpenAI 于2025年4月15日發布的最新語言模型系列&#xff0c;包括 GPT-4.1 、 GPT-4.1 mini 和 GPT-4.1 nano 三款新成員。這些模型在編程、指令遵循和長上下文理解方面表現出色&#xff0c;支持最大可達100萬個Token的上下文窗口&#xff0c;適用于處理復雜任務和…

計算機網絡(三)傳輸層TCP

目錄 一、TCP概述? 二、TCP三大核心特性 三、 對比UDP?? &#xff08;1&#xff09;TCP、UDP對比 &#xff08;2&#xff09;TCP、UDP頭部格式: &#xff08;3&#xff09;應用場景 ? 四、TCP的三次握手、四次揮手 &#xff08;1&#xff09;三次握手&#xff08;建…

Spring、SpringBoot 本身為什么不提供 Bean 的異步初始化

這是一個很有深度的架構問題&#xff01;Spring/Spring Boot 本身為什么不直接提供 Bean 的異步初始化&#xff1f; 下面從原理、歷史、設計哲學、技術挑戰、社區現狀等多個層面為你詳細分析。 一、Spring Bean 初始化的默認行為 Spring IoC 容器在啟動時&#xff0c;會同步地…

第十三節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - 接口操作審計日志功能

Vben5 系列文章目錄 ?? 基礎篇 ? 第一節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 ? 第二節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入門 - Python Flask 后端開發詳解(附源碼) ? 第三節:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入…

AI掌柜失守記:AI Agent商業自動化邊界實驗

1. 實驗設計&#xff1a;數字掌柜接管實體貨架 1.1 硬件載體與虛擬人格構建 位于舊金山的實驗場地被改造成微型零售生態系統&#xff1a;智能冰箱搭配商品籃構成實體貨架&#xff0c;iPad自助結賬系統連接Venmo支付接口&#xff0c;Slack通訊平臺成為人機交互窗口。Claude So…

NAT 打洞

本文基于NAT3NAT3實現upd打洞&#xff08;假設你對NAT類型已經很清楚&#xff09; 如果A網絡的NATAB網絡的NATB的值大于6則打洞會失敗&#xff0c;需要使用turn中繼服務 STUN協議解析 #pragma once #include "hv/UdpClient.h" #include "fmt/format.h" /*…

java近期工作總結

近期工作中的一些總結 &#xff08;1&#xff09;三層模板和流程 我發現很多東西其實吧&#xff0c;三層就是一個模板和流程&#xff1b; 正向推&#xff0c;從控制層開始&#xff0c;反向從內個sql開始寫&#xff0c;大部分應該就是從xml文件開始的&#xff0c;然后寫到控制層…

vue中的torefs

在 Vue 中&#xff0c; toRefs(state) 的返回值是一個 新對象&#xff0c;其中每個屬性都是對應 state 中原始屬性的 ref 對象。具體來說&#xff1a; 返回值的結構與特性 1. 對象結構 - 若輸入 state 為 { a: 1, b: text } &#xff0c;則 toRefs(state) 返回&a…

可編程邏輯器件的演進與對比分析

可編程邏輯器件的演進與對比分析 目錄 離散邏輯芯片與早期PLD的限制CPLD的誕生與結構特點FPGA的架構創新CPLD與FPGA的核心差異總結 1. 離散邏輯芯片與早期PLD的限制 在還沒有發明出可編程邏輯器件&#xff08;PLD: Programmable Logic Device&#xff09;之前&#xff0c;設…

Ubuntu機器開啟root用戶遠程登錄

一般正常情況是可以直接使用非root用戶登錄&#xff0c;但是由于權限問題&#xff0c;所以部分內容需要遠程ROOT用戶登錄&#xff0c;具體如下&#xff1a; 1??配置root用戶密碼 一般情況下系統中root不能直接登錄&#xff0c;所以也沒有保存root密碼&#xff0c;現在需要登…

rockchip android14 設置不休眠

rockchip android14 設置不休眠 文章目錄 rockchip android14 設置不休眠前言一、代碼路徑二、代碼修改前言 在rk 的android14代碼中設置開機后永不休眠 一、代碼路徑 device/rockchip/common/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml二、…

什么是數據孤島?如何解決數據孤島問題?

目錄 一、數據孤島的定義與表現 1. 數據孤島的定義 2. 數據孤島的表現形式 二、數據孤島產生的原因 1. 技術層面 2. 組織管理層面 3. 業務流程層面 三、數據孤島帶來的危害 1. 對企業決策的影響 2. 對業務運營效率的影響 3. 對數據治理和安全的影響 四、解決數據孤…