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

vue實(shí)現(xiàn)虛擬滾動(dòng)渲染成千上萬(wàn)條數(shù)據(jù)

 更新時(shí)間:2023年02月10日 09:25:24   作者:永遠(yuǎn)不會(huì)太晚  
本文主要介紹了vue實(shí)現(xiàn)虛擬滾動(dòng)渲染成千上萬(wàn)條數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

html渲染成千上萬(wàn)的dom會(huì)導(dǎo)致瀏覽器卡頓乃至卡死,虛擬滾動(dòng)就是解決方案之一
頁(yè)面只需要渲染可視區(qū)域的dom,當(dāng)用戶進(jìn)行滾動(dòng)時(shí)根據(jù)滾動(dòng)高度進(jìn)行可視區(qū)域dom的更新,從而達(dá)到無(wú)感滾動(dòng)效果

思路:

  • 根據(jù)數(shù)據(jù)條數(shù)計(jì)算相應(yīng)高度,使用dom占位,從而生成相應(yīng)高度滾動(dòng)列表,用戶可以自由滾動(dòng)
  • 監(jiān)聽(tīng)滾動(dòng)列表的scroll事件
  • 根據(jù)scrollTop進(jìn)行slice數(shù)組,取出相應(yīng)下標(biāo)數(shù)據(jù)
  • 根據(jù)scrollTop值控制虛擬列表偏移,使其始終在用戶可視區(qū)域內(nèi)
  • 上下需要預(yù)留一些dom,避免用戶滾動(dòng)過(guò)快出現(xiàn)白屏
  • 使用fixed,absolute,transform避免頁(yè)面回流

代碼量其實(shí)還是很少的,重點(diǎn)是理解思路

<template>
? <div class="device">
? ? <div class="vir-scroll">
? ? ? <div class="scroll-Y" @scroll="scroll">
? ? ? ? <div class="parentDom">
? ? ? ? ? <!-- 占位,根據(jù)數(shù)據(jù)條數(shù)生成滾動(dòng)列表 -->
? ? ? ? ? <div :style="{ height: screenHeight + 'px' }"></div>
? ? ? ? ? ?<!-- 虛擬滾動(dòng)列表 -->
? ? ? ? ? <div class="positionRelative" :style="{ transform: getTransform }">
? ? ? ? ? ? <div class="scroll-item" v-for="item in visibleData" :key="item.index">
? ? ? ? ? ? ? <div class="scroll-info">helloworld</div>
? ? ? ? ? ? </div>
? ? ? ? ? </div>
? ? ? ? </div>
? ? ? </div>
? ? </div>
? </div>
</template>
<script>
export default {
? data() {
? ? return {
? ? ? /** 數(shù)據(jù)列表 */
? ? ? dataList: [],
? ? ? /** 單行高度 */
? ? ? itemHeight: 143,
? ? ? /** 偏移高度 */
? ? ? startOffset: 0,
? ? ? /** 起始顯示數(shù)據(jù) */
? ? ? start: 0,
? ? ? /** 結(jié)束顯示數(shù)據(jù) */
? ? ? end: 10,
? ? }
? },
? computed: {
? ? /** 根據(jù)每條數(shù)據(jù)的高度獲取總列表高度 */
? ? screenHeight() {
? ? ? return this.dataList.length * this.itemHeight
? ? },
? ? /** 前面預(yù)留 */
? ? prevCount() {
? ? ? return 8
? ? },
? ? /** 后面預(yù)留 */
? ? nextCount() {
? ? ? return 25
? ? },
? ? /** 每次截取虛擬列表的位置 */
? ? getTransform() {
? ? ? return `translate(0,${this.startOffset}px)`
? ? },
? ? /** 虛擬數(shù)據(jù) */
? ? visibleData() {
? ? ? return this.dataList.slice(this.start, Math.min(this.end, this.dataList.length))
? ? },
? },
? methods: {
? ? /** 列表滾動(dòng),暫時(shí)不節(jié)流,因?yàn)闈L動(dòng)快觸發(fā)次數(shù)就少,容易導(dǎo)致沒(méi)有及時(shí)更新數(shù)組導(dǎo)致白屏 */
? ? scroll(e) {
? ? ? this.scrollThrottle(e.target.scrollTop)
? ? },
? ? /** 滾動(dòng)函數(shù) */
? ? scrollThrottle(scrollTop) {
? ? ? const topCount = Math.floor(scrollTop / this.itemHeight) - this.prevCount
? ? ? // 此時(shí)的開(kāi)始索引
? ? ? this.start = topCount >= 0 ? topCount : 0
? ? ? // 此時(shí)的結(jié)束索引
? ? ? this.end = this.start + this.nextCount
? ? ? // 此時(shí)的偏移量
? ? ? this.startOffset = this.start * this.itemHeight
? ? },
? },
}
</script>
<style scoped lang="scss">
.device {
? .vir-scroll {
? ? // 脫離文檔流避免回流
? ? position: fixed;
? ? left: 0;
? ? width: 100%;
? ? height: calc(100% - 196px);
? ? padding: 0 16px;
? ? z-index: 10;

? ? .scroll-Y {
? ? ? width: 100%;
? ? ? height: 100%;
? ? ? overflow-y: auto;

? ? ? .parentDom {
? ? ? ? position: relative;

? ? ? ? .positionRelative {
? ? ? ? ? width: 100%;
? ? ? ? ? position: absolute;
? ? ? ? ? left: 0;
? ? ? ? ? top: 0;
? ? ? ? ? border-radius: 5px;
? ? ? ? ? padding-bottom: 12.5px;

? ? ? ? ? .scroll-item {
? ? ? ? ? ? height: 143px;
? ? ? ? ? ? background-color: #ffffff;
? ? ? ? ? ? font-size: 12px;
? ? ? ? ? ? padding: 10px 15px 0px 15px;
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? }
}
</style>

到此這篇關(guān)于vue實(shí)現(xiàn)虛擬滾動(dòng)渲染成千上萬(wàn)條數(shù)據(jù)的文章就介紹到這了,更多相關(guān)vue 虛擬滾動(dòng)渲染內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端登錄退出處理Token問(wèn)題(獲取、緩存、失效處理)及代碼實(shí)現(xiàn)方法

    前端登錄退出處理Token問(wèn)題(獲取、緩存、失效處理)及代碼實(shí)現(xiàn)方法

    token是一個(gè)用戶信息的表示,在登錄中將會(huì)從后端拿到token,然后用戶才可以進(jìn)行往后的一系列操作,這篇文章主要給大家介紹了關(guān)于前端登錄退出處理Token問(wèn)題(獲取、緩存、失效處理)及代碼實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Vue.extend 登錄注冊(cè)模態(tài)框的實(shí)現(xiàn)

    Vue.extend 登錄注冊(cè)模態(tài)框的實(shí)現(xiàn)

    這篇文章主要介紹了Vue.extend 登錄注冊(cè)模態(tài)框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Vue3的setup在el-tab中動(dòng)態(tài)加載組件的方法

    Vue3的setup在el-tab中動(dòng)態(tài)加載組件的方法

    公司某項(xiàng)目需求在頁(yè)面顯示的組件是根據(jù)角色變化而變化的,怎么實(shí)現(xiàn)這個(gè)效果呢,下面小編給大家介紹下Vue3的setup在el-tab中動(dòng)態(tài)加載組件的方法,需要的朋友可以參考下
    2022-11-11
  • vue 解決provide和inject響應(yīng)的問(wèn)題

    vue 解決provide和inject響應(yīng)的問(wèn)題

    這篇文章主要介紹了vue 解決provide和inject響應(yīng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue3中使用logicFlow的方法代碼示例

    vue3中使用logicFlow的方法代碼示例

    在Vue3環(huán)境下,使用LogicFlow可實(shí)現(xiàn)流程圖的繪制,詳細(xì)步驟包括引入LogicFlow庫(kù),注冊(cè)節(jié)點(diǎn)與邊,設(shè)置主題和渲染數(shù)據(jù),還包括使用Map和Menu進(jìn)行功能擴(kuò)展和右鍵編輯,以及通過(guò)事件監(jiān)聽(tīng)實(shí)現(xiàn)交互,
    2024-10-10
  • 前端vue中實(shí)現(xiàn)文件下載的幾種方法總結(jié)

    前端vue中實(shí)現(xiàn)文件下載的幾種方法總結(jié)

    這篇文章主要介紹了前端vue中實(shí)現(xiàn)文件下載的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue實(shí)現(xiàn)tagsview多頁(yè)簽導(dǎo)航功能的示例代碼

    vue實(shí)現(xiàn)tagsview多頁(yè)簽導(dǎo)航功能的示例代碼

    這篇文章主要介紹了vue實(shí)現(xiàn)tagsview多頁(yè)簽導(dǎo)航功能,本文梳理了一下vue-element-admin項(xiàng)目實(shí)現(xiàn)多頁(yè)簽功能的整體步驟,需要的朋友可以參考下
    2022-08-08
  • Vue 獲取數(shù)組鍵名的方法

    Vue 獲取數(shù)組鍵名的方法

    本篇文章主要介紹了Vue 獲取數(shù)組鍵名的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Vue渲染器設(shè)計(jì)實(shí)現(xiàn)流程詳細(xì)講解

    Vue渲染器設(shè)計(jì)實(shí)現(xiàn)流程詳細(xì)講解

    在瀏覽器平臺(tái)上,用它來(lái)渲染其中的真實(shí)DOM元素。渲染器不僅能夠渲染真實(shí)的DOM元素,它還是框架跨平臺(tái)能力的關(guān)鍵。所以在設(shè)計(jì)渲染器的時(shí)候一定要考慮好自定義的能力
    2023-01-01
  • vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決

    vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決

    這篇文章主要介紹了vue部署到線上為啥會(huì)出現(xiàn)404的原因分析及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

仁寿县| 成都市| 集安市| 彝良县| 涞源县| 鸡泽县| 顺义区| 沂水县| 河曲县| 彝良县| 平度市| 鹰潭市| 革吉县| 泸州市| 海城市| 蓬安县| 安泽县| 金寨县| 濮阳县| 武陟县| 松溪县| 海口市| 桑植县| 佛学| 抚顺市| 老河口市| 成武县| 明溪县| 太仓市| 秦皇岛市| 华亭县| 调兵山市| 闽侯县| 玉屏| 鲁山县| 繁峙县| 云林县| 陆川县| 宜春市| 郓城县| 织金县|