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

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

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

test方法

test() {
   // 節(jié)流
   if (this.carriedOut) {
    // 容器跟里面的列表項
    const { container, li } = this;
    // 計算可視區(qū)域最多能顯示多少個li
    this.MAX_NUM = Math.ceil(container.height / li.height);
    // 獲取 overflow:scroll 的元素已滾動的高度
    let scrollTop = this.$refs.container.scrollTop;
    // 計算當前處于第一排的元素的下標
    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ù)計算出來的 第一排元素的下標,和最多顯示多少個 用slice實現(xiàn)截取數(shù)組
   let arr = this.list.slice(this.pos, this.pos + this.MAX_NUM);
   return arr;
  },
 },

這是html,注意監(jiān)聽了div的scroll事件,并且調用的是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: {
    // 列表項信息
    height: 50,
   },
   container: {
    // 容器信息
    height: 500,
   },
   pos: 1, // 第一排顯示的元素的下標
   MAX_NUM: 1, // 在容器內最多顯示幾個列表項
   timer: null, // 定時器
   carriedOut: true, // 能不能執(zhí)行操作
  };
 },
 mounted() {
  // 創(chuàng)建一個賊大的數(shù)據(jù)數(shù)組
  for (let i = 0; i < 1000; i++) {
   this.list.push(i);
  }
  this.test();
 },
 computed: {
  // 用于渲染在頁面上的數(shù)組
  showList() {
   // 根據(jù)計算出來的 第一排元素的下標,和最多顯示多少個 用slice實現(xiàn)截取數(shù)組
   let arr = this.list.slice(this.pos, this.pos + this.MAX_NUM);
   return arr;
  },
 },
 methods: {
  test() {
   // 節(jié)流
   if (this.carriedOut) {
    // 容器跟里面的列表項
    const { container, li } = this;
    // 計算可視區(qū)域最多能顯示多少個li
    this.MAX_NUM = Math.ceil(container.height / li.height);
    // 獲取 overflow:scroll 的元素已滾動的高度
    let scrollTop = this.$refs.container.scrollTop;
    // 計算當前處于第一排的元素的下標
    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>

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

相關文章

  • 微信小程序實戰(zhàn)基于vue2實現(xiàn)瀑布流的代碼實例

    微信小程序實戰(zhàn)基于vue2實現(xiàn)瀑布流的代碼實例

    瀑布流,又稱瀑布流式布局,是比較流行的一種網(wǎng)站頁面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當前尾部,這篇文章主要介紹了微信小程序實戰(zhàn),基于vue2實現(xiàn)瀑布流,需要的朋友可以參考下
    2022-12-12
  • Vue項目保持element組件同行,設置組件不自動換行問題

    Vue項目保持element組件同行,設置組件不自動換行問題

    這篇文章主要介紹了Vue項目保持element組件同行,設置組件不自動換行問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Vue 基礎語法之計算屬性(computed)、偵聽器(watch)、過濾器(filters)詳解

    Vue 基礎語法之計算屬性(computed)、偵聽器(watch)、過濾器(filters)詳解

    計算屬性就是 Vue 實例選項中的 computed,computed 的值是一個對象類型,對象中的屬性值為函數(shù),而且這個函數(shù)沒辦法接收參數(shù),這篇文章主要介紹了Vue 基礎語法之計算屬性(computed)、偵聽器(watch)、過濾器(filters)詳解,需要的朋友可以參考下
    2022-11-11
  • vue?卸載eslint方式

    vue?卸載eslint方式

    這篇文章主要介紹了vue?卸載eslint方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Nuxt.js之自動路由原理的實現(xiàn)方法

    Nuxt.js之自動路由原理的實現(xiàn)方法

    這篇文章主要介紹了Nuxt.js之自動路由原理的實現(xiàn)方法,nuxt.js會根據(jù)pages目錄結構自動生成vue-router模塊的路由配置。非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • 詳解Vue-cli中的靜態(tài)資源管理(src/assets和static/的區(qū)別)

    詳解Vue-cli中的靜態(tài)資源管理(src/assets和static/的區(qū)別)

    這篇文章主要介紹了Vue-cli中的靜態(tài)資源管理(src/assets和static/的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Vue Element UI 表單自定義校驗規(guī)則及使用

    Vue Element UI 表單自定義校驗規(guī)則及使用

    這篇文章主要介紹了Vue Element UI 表單自定義效驗規(guī)則及使用,文中通過代碼介紹了常見表單效驗規(guī)則,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • electron實現(xiàn)打印功能支持靜默打印、無感打印

    electron實現(xiàn)打印功能支持靜默打印、無感打印

    使用electron開發(fā)應用遇到了打印小票的功能,實現(xiàn)途中還是幾經(jīng)波折,下面這篇文章主要給大家介紹了關于electron實現(xiàn)打印功能支持靜默打印、無感打印的相關資料,需要的朋友可以參考下
    2023-12-12
  • 一篇帶你搞懂Vue項目里的權限控制

    一篇帶你搞懂Vue項目里的權限控制

    這篇文章主要為大家介紹了vue項目里的權限控制,文中有詳細的代碼示例供大家參考,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-06-06
  • Vue3-KeepAlive,多個頁面使用keepalive方式

    Vue3-KeepAlive,多個頁面使用keepalive方式

    這篇文章主要介紹了Vue3-KeepAlive,多個頁面使用keepalive方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論