最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2023年10月17日 11:39:20   作者:餃子不放糖  
虛擬滾動(dòng)和分頁(yè)加載是一種優(yōu)化大型數(shù)據(jù)集的常見(jiàn)技術(shù),用于在Web應(yīng)用程序中提高性能和用戶體驗(yàn),在本文中,我將演示如何使用JavaScript和HTML/CSS來(lái)實(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>元素來(lái)表示列表,每個(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 樣式

接下來(lái),我們將為列表項(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來(lái)生成虛擬滾動(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)聽(tīng)滾動(dòng)事件
  container.addEventListener("scroll", handleScroll);
});

4. 解釋

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

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

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

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

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

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

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

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

    • 最后,我們監(jiān)聽(tīng)容器的滾動(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)離開(kāi)視圖的項(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)文章

  • 銀河麒麟V10?x86安裝MySQL?8.0超詳細(xì)步驟記錄

    銀河麒麟V10?x86安裝MySQL?8.0超詳細(xì)步驟記錄

    MySQL廣泛用于Web應(yīng)用程序的后端數(shù)據(jù)庫(kù)存儲(chǔ),因?yàn)樗且粋€(gè)快速、穩(wěn)定、可靠且易于使用的數(shù)據(jù)庫(kù)系統(tǒng),下面這篇文章主要介紹了銀河麒麟V10 x86安裝MySQL 8.0超詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • MySQL Workbench導(dǎo)入excel數(shù)據(jù)的實(shí)現(xiàn)示例

    MySQL Workbench導(dǎo)入excel數(shù)據(jù)的實(shí)現(xiàn)示例

    本文主要介紹了MySQL Workbench導(dǎo)入excel數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mysql 動(dòng)態(tài)執(zhí)行存儲(chǔ)過(guò)程語(yǔ)句

    mysql 動(dòng)態(tài)執(zhí)行存儲(chǔ)過(guò)程語(yǔ)句

    MSSQL中動(dòng)態(tài)執(zhí)行sql語(yǔ)句可以使用EXEC()函數(shù)。MSSQL中也有類似的函數(shù)EXECUTE(),不過(guò)不同的是MYSQL中動(dòng)態(tài)執(zhí)行存儲(chǔ)過(guò)程語(yǔ)句與MSSQL還是有區(qū)別的。
    2009-07-07
  • mysql?sock文件存儲(chǔ)了什么信息

    mysql?sock文件存儲(chǔ)了什么信息

    這篇文章主要為大家介紹了mysql?sock文件存儲(chǔ)了什么信息的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 一鍵安裝mysql5.7及密碼策略修改方法

    一鍵安裝mysql5.7及密碼策略修改方法

    這篇文章主要介紹了一鍵安裝mysql5.7及密碼策略修改方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • Ubuntu 18.04 安裝mysql5.7

    Ubuntu 18.04 安裝mysql5.7

    這篇文章主要為大家詳細(xì)介紹了Ubuntu 18.04 安裝mysql 5.7的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • mysql+mybatis實(shí)現(xiàn)存儲(chǔ)過(guò)程+事務(wù)?+?多并發(fā)流水號(hào)獲取

    mysql+mybatis實(shí)現(xiàn)存儲(chǔ)過(guò)程+事務(wù)?+?多并發(fā)流水號(hào)獲取

    這篇文章主要介紹了mysql+mybatis+存儲(chǔ)過(guò)程+事務(wù)?+?多并發(fā)流水號(hào)獲取,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 解決遠(yuǎn)程連接mysql很慢的方法(mysql_connect 打開(kāi)連接慢)

    解決遠(yuǎn)程連接mysql很慢的方法(mysql_connect 打開(kāi)連接慢)

    有次同事提出開(kāi)發(fā)使用的mysql數(shù)據(jù)庫(kù)連接很慢,因?yàn)槲覀兊膍ysql開(kāi)發(fā)數(shù)據(jù)庫(kù)是單獨(dú)一臺(tái)機(jī)器部署的,所以認(rèn)為可能是網(wǎng)絡(luò)連接問(wèn)題導(dǎo)致的。
    2011-07-07
  • SQL?SERVER數(shù)據(jù)庫(kù)服務(wù)器CPU不能全部利用原因解析

    SQL?SERVER數(shù)據(jù)庫(kù)服務(wù)器CPU不能全部利用原因解析

    這篇文章主要介紹了SQL?SERVER數(shù)據(jù)庫(kù)服務(wù)器CPU不能全部利用原因解析,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • 4種MySQL數(shù)據(jù)同步ES方案詳解

    4種MySQL數(shù)據(jù)同步ES方案詳解

    這篇文章主要給大家分享介紹了關(guān)于4種MySQL數(shù)據(jù)同步ES方案的相關(guān)資料,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù),而Elasticsearch是一種為搜索和分析而設(shè)計(jì)的分布式全文搜索引擎,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

中方县| 渭源县| 湛江市| 肥城市| 铅山县| 项城市| 诸城市| 墨玉县| 那曲县| 东兰县| 九江市| 札达县| 县级市| 临澧县| 金沙县| 沙坪坝区| 中牟县| 贺兰县| 岳西县| 耒阳市| 安康市| 秀山| 武山县| 清苑县| 双鸭山市| 洪江市| 泗水县| 安图县| 收藏| 增城市| 松江区| 芮城县| 沅江市| 宁晋县| 永靖县| 讷河市| 信宜市| 天峻县| 扎鲁特旗| 商水县| 施秉县|