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

vue實(shí)現(xiàn)虛擬列表功能的代碼

 更新時(shí)間:2020年07月28日 10:39:48   作者:achao_2020  
這篇文章主要介紹了vue實(shí)現(xiàn)虛擬列表,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

當(dāng)數(shù)據(jù)量較大(此處設(shè)定為10w),而且要用列表的形式展現(xiàn)給用戶,如果我們不做處理的話,在瀏覽器中渲染10w dom節(jié)點(diǎn),是極其耗費(fèi)時(shí)間的,那我的Macbook air舉例,10w條數(shù)據(jù)渲染出來到能看到頁面,需要13秒多(實(shí)際應(yīng)該是10秒左右),如果是用戶的話肯定是不會(huì)等一個(gè)網(wǎng)頁十幾秒的

在這里插入圖片描述

我們可以用虛擬列表解決這個(gè)問題
一步步來
首先看一下效果

在這里插入圖片描述

這是data中的數(shù)據(jù)

data() {
  return {
   list: [], // 賊大的數(shù)組
   li: {
    // 列表項(xiàng)信息
    height: 50,
   },
   container: {
    // 容器信息
    height: 500,
   },
   pos: 1, // 第一排顯示的元素的下標(biāo)
   MAX_NUM: 1, // 在容器內(nèi)最多顯示幾個(gè)列表項(xiàng)
   timer: null, // 定時(shí)器
   carriedOut: true, // 能不能執(zhí)行操作
  };
 },

然后在mounted中創(chuàng)建一個(gè)賊大的數(shù)組,在調(diào)用test方法計(jì)算第一次的虛擬列表中有哪些

mounted() {
  // 創(chuàng)建一個(gè)賊大的數(shù)據(jù)數(shù)組
  for (let i = 0; i < 100000; i++) {
   this.list.push(i);
  }
  this.test();
 },

test方法

test() {
   // 節(jié)流
   if (this.carriedOut) {
    // 容器跟里面的列表項(xiàng)
    const { container, li } = this;
    // 計(jì)算可視區(qū)域最多能顯示多少個(gè)li
    this.MAX_NUM = Math.ceil(container.height / li.height);
    // 獲取 overflow:scroll 的元素已滾動(dòng)的高度
    let scrollTop = this.$refs.container.scrollTop;
    // 計(jì)算當(dāng)前處于第一排的元素的下標(biāo)
    this.pos = Math.round(scrollTop / li.height);
    // 下方節(jié)流操作
    this.carriedOut = false;
    this.timer = setTimeout(() => {
     this.carriedOut = true;
     clearTimeout(this.timer);
    }, 50);
   }
  },

然后是computed

computed: {
  // 用于渲染在頁面上的數(shù)組
  showList() {
   // 根據(jù)計(jì)算出來的 第一排元素的下標(biāo),和最多顯示多少個(gè) 用slice實(shí)現(xiàn)截取數(shù)組
   let arr = this.list.slice(this.pos, this.pos + this.MAX_NUM);
   return arr;
  },
 },

這是html,注意監(jiān)聽了div的scroll事件,并且調(diào)用的是test方法

<div class="virtual-list">
  <h1>虛擬列表</h1>
  <div class="container" ref="container" :style="`height:${container.height}px`" @scroll="test">
   <ul :style="`height:${li.height*list.length}px;padding-top:${li.height*pos}px`">
    <li :style="`height:${li.height}px`" v-for="item in 100000" :key="item">{{item}}</li>
   </ul>
  </div>
 </div>

完整源代碼

<template>
 <div class="virtual-list">
  <h1>虛擬列表</h1>
  <div class="container" ref="container" :style="`height:${container.height}px`" @scroll="test">
   <ul :style="`height:${li.height*list.length}px;padding-top:${li.height*pos}px`">
    <li :style="`height:${li.height}px`" v-for="item of showList" :key="item">{{item}}</li>
   </ul>
  </div>
 </div>
</template>

<script>
export default {
 data() {
  return {
   list: [], // 賊大的數(shù)組
   li: {
    // 列表項(xiàng)信息
    height: 50,
   },
   container: {
    // 容器信息
    height: 500,
   },
   pos: 1, // 第一排顯示的元素的下標(biāo)
   MAX_NUM: 1, // 在容器內(nèi)最多顯示幾個(gè)列表項(xiàng)
   timer: null, // 定時(shí)器
   carriedOut: true, // 能不能執(zhí)行操作
  };
 },
 mounted() {
  // 創(chuàng)建一個(gè)賊大的數(shù)據(jù)數(shù)組
  for (let i = 0; i < 1000; i++) {
   this.list.push(i);
  }
  this.test();
 },
 computed: {
  // 用于渲染在頁面上的數(shù)組
  showList() {
   // 根據(jù)計(jì)算出來的 第一排元素的下標(biāo),和最多顯示多少個(gè) 用slice實(shí)現(xiàn)截取數(shù)組
   let arr = this.list.slice(this.pos, this.pos + this.MAX_NUM);
   return arr;
  },
 },
 methods: {
  test() {
   // 節(jié)流
   if (this.carriedOut) {
    // 容器跟里面的列表項(xiàng)
    const { container, li } = this;
    // 計(jì)算可視區(qū)域最多能顯示多少個(gè)li
    this.MAX_NUM = Math.ceil(container.height / li.height);
    // 獲取 overflow:scroll 的元素已滾動(dòng)的高度
    let scrollTop = this.$refs.container.scrollTop;
    // 計(jì)算當(dāng)前處于第一排的元素的下標(biāo)
    this.pos = Math.round(scrollTop / li.height);
    // 下方節(jié)流操作
    this.carriedOut = false;
    this.timer = setTimeout(() => {
     this.carriedOut = true;
     clearTimeout(this.timer);
    }, 50);
   }
  },
 },
};
</script>

<style lang="scss" scoped>
.virtual-list {
 text-align: center;
 .container {
  overflow: scroll;
  border: 1px solid red;
 }
}
</style>

到此這篇關(guān)于vue實(shí)現(xiàn)虛擬列表功能的代碼的文章就介紹到這了,更多相關(guān)vue 虛擬列表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于vue的tab-list類目切換商品列表組件的示例代碼

    基于vue的tab-list類目切換商品列表組件的示例代碼

    這篇文章主要介紹了基于vue的tab-list類目切換商品列表組件的示例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • vue 列表頁跳轉(zhuǎn)詳情頁獲取id以及詳情頁通過id獲取數(shù)據(jù)

    vue 列表頁跳轉(zhuǎn)詳情頁獲取id以及詳情頁通過id獲取數(shù)據(jù)

    這篇文章主要介紹了vue 列表頁跳轉(zhuǎn)詳情頁獲取id以及詳情頁通過id獲取數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vue?文件切片上傳的項(xiàng)目實(shí)現(xiàn)

    vue?文件切片上傳的項(xiàng)目實(shí)現(xiàn)

    本文主要介紹了vue?文件切片上傳的項(xiàng)目實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • vue+tp5實(shí)現(xiàn)簡單登錄功能

    vue+tp5實(shí)現(xiàn)簡單登錄功能

    這篇文章主要為大家詳細(xì)介紹了vue+tp5實(shí)現(xiàn)簡單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值

    如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值

    小編在做需求時(shí),遇到了在el-table表格中加入多條數(shù)據(jù),并且每條數(shù)據(jù)要通過el-select來選取相應(yīng)的值,做到動(dòng)態(tài)選擇,下面這篇文章主要給大家介紹了關(guān)于如何使用el-table+el-tree+el-select動(dòng)態(tài)選擇對(duì)應(yīng)值的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • vite多頁面配置項(xiàng)目實(shí)戰(zhàn)

    vite多頁面配置項(xiàng)目實(shí)戰(zhàn)

    vite官方文檔中有關(guān)于多頁面應(yīng)用模式如果配置的說明,下面這篇文章主要給大家介紹了關(guān)于vite多頁面配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 詳解Vue單元測試case寫法

    詳解Vue單元測試case寫法

    這篇文章主要介紹了詳解Vue單元測試case寫法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Vue路由管理器Vue-router的使用方法詳解

    Vue路由管理器Vue-router的使用方法詳解

    本文將詳細(xì)介紹Vue路由管理器Vue-router的使用方法詳解,需要的朋友可以參考下
    2020-02-02
  • 詳解vue表單驗(yàn)證組件 v-verify-plugin

    詳解vue表單驗(yàn)證組件 v-verify-plugin

    本篇文章主要介紹了詳解vue表單驗(yàn)證組件 v-verify-plugin,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 解決vue無法加載文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本問題

    解決vue無法加載文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps

    這篇文章主要介紹了解決vue無法加載文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論

巴青县| 宿松县| 辉南县| 古丈县| 富蕴县| 仙游县| 宣汉县| 醴陵市| 安吉县| 淳安县| 休宁县| 壶关县| 博湖县| 浙江省| 乳山市| 雅江县| 德令哈市| 霍山县| 鄄城县| 敦化市| 阿拉善左旗| 云龙县| 万盛区| 葫芦岛市| 新源县| 内黄县| 三河市| 南川市| 乌兰浩特市| 大丰市| 甘孜| 木里| 丁青县| 封丘县| 边坝县| 喀喇沁旗| 兴业县| 东乡| 南陵县| 古丈县| 屏边|