亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用JS+HTML/CSS實(shí)現(xiàn)虛擬滾動(dòng)和分頁(yè)加載效果

 更新時(shí)間:2023年10月17日 11:39:20   作者:餃子不放糖  
虛擬滾動(dòng)和分頁(yè)加載是一種優(yōu)化大型數(shù)據(jù)集的常見技術(shù),用于在Web應(yīng)用程序中提高性能和用戶體驗(yàn),在本文中,我將演示如何使用JavaScript和HTML/CSS來實(shí)現(xiàn)虛擬滾動(dòng)和分頁(yè)加載,同時(shí)提供示例代碼和詳細(xì)解釋,需要的朋友可以參考下

1. HTML 結(jié)構(gòu)

首先,我們需要?jiǎng)?chuàng)建一個(gè)基本的HTML結(jié)構(gòu),用于容納虛擬滾動(dòng)列表。我們將使用<ul>元素來表示列表,每個(gè)列表項(xiàng)使用<li>元素。

<!DOCTYPE html>
<html>
<head>
  <title>虛擬滾動(dòng)和分頁(yè)加載示例</title>
  <link rel="stylesheet" href="styles.css" rel="external nofollow" >
</head>
<body>
  <div class="container">
    <ul class="virtual-list">
      <!-- 這里將在后續(xù)步驟中生成列表項(xiàng) -->
    </ul>
  </div>
  <div class="loading" id="loading">加載中...</div>
</body>
</html>

2. CSS 樣式

接下來,我們將為列表項(xiàng)和加載指示器創(chuàng)建一些基本的CSS樣式,以便將其裝飾。

/* styles.css */
.container {
  width: 300px;
  height: 400px;
  overflow: auto;
  border: 1px solid #ccc;
}
.virtual-list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.virtual-list li {
  padding: 16px;
  border-bottom: 1px solid #ccc;
}
.loading {
  text-align: center;
  display: none;
  margin: 20px;
}

3. JavaScript 代碼

現(xiàn)在,我們將使用JavaScript來生成虛擬滾動(dòng)列表并實(shí)現(xiàn)分頁(yè)加載。在這個(gè)示例中,我們將加載一個(gè)包含3000個(gè)虛擬項(xiàng)目的數(shù)據(jù)集。

// script.js
document.addEventListener("DOMContentLoaded", function () {
  const container = document.querySelector(".container");
  const list = document.querySelector(".virtual-list");
  const loadingIndicator = document.getElementById("loading");
  const pageSize = 50; // 每頁(yè)加載的項(xiàng)目數(shù)量
  let currentPage = 1; // 當(dāng)前頁(yè)碼
  function generateItem(index) {
    const li = document.createElement("li");
    li.textContent = `Item #${index}`;
    return li;
  }
  function loadPage(page) {
    loadingIndicator.style.display = "block";
    // 模擬異步加載數(shù)據(jù)
    setTimeout(() => {
      for (let i = 0; i < pageSize; i++) {
        const itemIndex = (page - 1) * pageSize + i + 1;
        list.appendChild(generateItem(itemIndex));
      }
      loadingIndicator.style.display = "none";
    }, 1000);
  }
  function handleScroll() {
    if (
      container.scrollTop + container.clientHeight >=
      list.clientHeight - 100
    ) {
      currentPage++;
      loadPage(currentPage);
    }
  }
  // 初始化頁(yè)面
  loadPage(currentPage);
  // 監(jiān)聽滾動(dòng)事件
  container.addEventListener("scroll", handleScroll);
});

4. 解釋

讓我們解釋上述代碼的關(guān)鍵部分:

  • 我們首先在HTML中創(chuàng)建了一個(gè)包含列表項(xiàng)的<ul>元素。容器元素(.container)用于容納虛擬列表,而列表元素(.virtual-list)將包含虛擬項(xiàng)。加載指示器(.loading)用于顯示加載過程中的消息。

  • 在CSS中,我們?cè)O(shè)置了列表項(xiàng)和加載指示器的樣式,使其看起來更好。

  • 在JavaScript中,我們定義了以下幾個(gè)重要的部分:

    • generateItem(index) 函數(shù)用于生成列表項(xiàng),每個(gè)列表項(xiàng)都包含一個(gè)唯一的文本。

    • loadPage(page) 函數(shù)模擬分頁(yè)加載數(shù)據(jù)。我們使用setTimeout模擬異步加載,加載完成后將新的項(xiàng)目添加到列表中。

    • handleScroll() 函數(shù)用于監(jiān)聽滾動(dòng)事件。當(dāng)用戶滾動(dòng)列表并接近底部時(shí),它會(huì)觸發(fā)加載下一頁(yè)的數(shù)據(jù)。

    • 在初始化階段,我們加載第一頁(yè)數(shù)據(jù)。

    • 最后,我們監(jiān)聽容器的滾動(dòng)事件,并在接近底部時(shí)觸發(fā)加載下一頁(yè)的數(shù)據(jù)。

5. 性能優(yōu)化

要進(jìn)一步優(yōu)化性能,您可以考慮以下幾點(diǎn):

  • 初始加載:如果用戶不必立即看到整個(gè)列表,請(qǐng)考慮僅加載第一頁(yè)數(shù)據(jù),并在滾動(dòng)時(shí)加載其他頁(yè)面。

  • 回收視圖:當(dāng)用戶滾動(dòng)離開視圖的項(xiàng)目時(shí),可以從DOM中刪除這些項(xiàng)目,以減少內(nèi)存占用。

  • 使用虛擬滾動(dòng)庫(kù):對(duì)于更復(fù)雜的用例,可以考慮使用現(xiàn)有的虛擬滾動(dòng)庫(kù),如react-windowreact-virtualized,以簡(jiǎn)化實(shí)現(xiàn)并提高性能。

以上就是使用JS+HTML/CSS實(shí)現(xiàn)虛擬滾動(dòng)和分頁(yè)加載效果的詳細(xì)內(nèi)容,更多關(guān)于JS虛擬滾動(dòng)和分頁(yè)加載的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis 如何寫配置文件和簡(jiǎn)單使用

    MyBatis 如何寫配置文件和簡(jiǎn)單使用

    這篇文章主要介紹了MyBatis 如何寫配置文件和簡(jiǎn)單使用的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MySQL Installer 8.0.21安裝教程圖文詳解

    MySQL Installer 8.0.21安裝教程圖文詳解

    這篇文章主要介紹了MySQL Installer 8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理

    詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理

    這篇文章主要介紹了詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-01-01
  • MySQL系列之十三 MySQL的復(fù)制

    MySQL系列之十三 MySQL的復(fù)制

    這篇文章主要介紹了MySQL系列之十三 MySQL的復(fù)制,詳細(xì)的講述了多種復(fù)制架構(gòu)的案例和MySQL復(fù)制相關(guān)概念等,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • MySQL存儲(chǔ)過程的查詢命令介紹

    MySQL存儲(chǔ)過程的查詢命令介紹

    這篇文章主要介紹了MySQL存儲(chǔ)過程的查詢命令介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • MySQL 事務(wù)概念與用法深入詳解

    MySQL 事務(wù)概念與用法深入詳解

    這篇文章主要介紹了MySQL 事務(wù)概念與用法,結(jié)合實(shí)例形式深入分析了MySQL 事務(wù)基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • MySQL觸發(fā)器基本用法詳解【創(chuàng)建、查看、刪除等】

    MySQL觸發(fā)器基本用法詳解【創(chuàng)建、查看、刪除等】

    這篇文章主要介紹了MySQL觸發(fā)器基本用法,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的基本創(chuàng)建、查看、刪除等相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • mysql的查詢緩存說明

    mysql的查詢緩存說明

    mysql的Query Cache有其特殊的業(yè)務(wù)場(chǎng)景,也不像其他數(shù)據(jù)庫(kù)產(chǎn)品,緩存查詢語句的執(zhí)行計(jì)劃等信息,而是直接緩存查詢語句的記錄集和對(duì)應(yīng)的SQL語句
    2013-02-02
  • MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)

    MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù)

    這篇文章主要介紹了MySQL基于group_concat()函數(shù)合并多行數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Linux下MySQL 5.6.27 安裝教程

    Linux下MySQL 5.6.27 安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux下MySQL 5.6.27 安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論