vue3長列表優化,使用vue-virtual-scroller實現直播間彈幕列表虛擬滾動效果

使用的組件庫是:https://github.com/Akryum/vue-virtual-scroller?

官方文檔:vue-virtual-scroller

安裝依賴

npm install --save vue-virtual-scroller@nextpnpm install --save vue-virtual-scroller@nextyarn add vue-virtual-scroller@next

組件導入

在main.ts中導入組件,這個依賴庫支持RecycleScroller,DynamicScroller,DynamicScrollerItem三個組件,可以全量導入,也可以部分導入。這三個組件區別是滾動每一項高度是固定的還是動態的,Recycle就是固定的高度,Dynamic是動態的,動態的話,必須要包含DynamicScrollerItem。

import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'
import VirtualScroller from 'vue-virtual-scroller'app.use(VirtualScroller)

使用試試

使用固定高度的RecycleScroller組件:

<template><RecycleScrollerclass="scroller":items="list":item-size="32"key-field="id"v-slot="{ item }"><div class="user">{{ item.name }}</div></RecycleScroller>
</template><script>
export default {props: {list: Array,},
}
</script><style scoped>
.scroller {height: 100%;
}.user {height: 32%;padding: 0 12px;display: flex;align-items: center;
}
</style>

使用動態高度的DynamicScroller組件:

注意事項:要結合DynamicScrollerItem一起使用,并且要加上active屬性才可以,不然會有警告。

<DynamicScroller:items="messageList":min-item-size="32"class="liveMeg"id="liveMsg"ref="liveMsg"v-if="messageList.length"><template v-slot="{ item, active }"><DynamicScrollerItem:item="item":active="active"class="msgBox":size-dependencies="[item.name, item.msg]":data-index="item.id"><div class="content"><span class="name">{{ item.name }}:</span><span class="msg">{{ item.msg }}</span></div></DynamicScrollerItem></template></DynamicScroller>css樣式:
.liveMeg {flex: 1;margin-left: 10px;background-color: #252632;border-radius: 10px;box-shadow: 0 0 10px 2px gray;scrollbar-color: #363741 transparent;scrollbar-width: thin;overflow-y: scroll;.msgBox {display: flex;flex-direction: row;padding: 5px;white-space: wrap;.name {color: #8ce7ff;margin-right: 2px;white-space: nowrap;}.msg {color: white;white-space: wrap;}}}

沒使用之前頁面會渲染超級多個div元素,但是使用這個虛擬列表之后,就只會渲染在視窗里面的元素:頁面中元素數量一直就是這多,超過了就不會渲染出來

自動滾動到底部

想要讓消息內容自動滾動到底部,適用于直播間彈幕消息或者聊天消息等結構,可以嘗試使用這種方式。但是需要注意:獲取DynamicScroller這個組件的時候,要使用document.getElementById('liveMsg')這種形式,不能使用ref這種,因為ref獲取到的并不是一個html元素,沒有scrollTop方法,所以無法滾動到底部。

// 滾動盒子到底部if (liveMsg.value) {const msgDom: HTMLElement | null = document.getElementById('liveMsg')console.log('liveMsg.value--', msgDom)if (msgDom) {msgDom.scrollTop = msgDom.scrollHeight}}

我這就是在收到message消息的時候就執行這個滾動的方法:

最后實現的抖音直播間的彈幕滾動效果:

開源地址:GitHub - Sjj1024/LiveBox: livebox

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38159.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何用文章改寫ai軟件進行改寫?5個軟件教你快速進行修改文章

如何用文章改寫ai軟件進行改寫&#xff1f;5個軟件教你快速進行修改文章 使用AI改寫軟件可以幫助你快速重寫文章&#xff0c;使其更加流暢、符合要求或避免重復。以下是五款優質的AI改寫軟件&#xff0c;它們能夠幫助你快速進行文章修改&#xff1a; 聰明靈犀 這是一款非常簡…

數據結構_1.0

一、數據結構概述 1.1 概念 在計算機科學中&#xff0c;數據結構是一種數據組織、管理和存儲的格式 。它是相互之間存在一種或多種特定關系的數據元素的集合。通常情況下&#xff0c;精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技…

【開源合規】開源許可證基礎知識與風險場景引入

文章目錄 什么是開源許可證(License)?開源許可證有什么用?開源許可證分類開源許可證分類及描述公共代碼 (Public Domain)CC0無License寬松型許可證 (Permissive)MITApache 2.0BSD弱互惠型許可證 (Weak Copyleft)LGPLMPLEPL互惠型許可證 (Reciprocal)GPLEUPL強互惠許可證 (Str…

讀-改-寫操作

1 什么是讀-改-寫操作 “讀-改-寫”&#xff08;Read-Modify-Write&#xff0c;簡稱RMW&#xff09;是一種常見的操作模式&#xff0c;它通常用于需要更新數據的場景。 這個模式包含三個基本步驟&#xff1a; 1.讀&#xff08;Read&#xff09;&#xff1a;首先讀取當前的數據…

從0開始學習pyspark--pyspark的數據分析方式[第2節]

PySpark是Apache Spark的Python API&#xff0c;能夠在分布式計算環境中處理大規模數據。本文將詳細介紹PySpark中不同的數據分析方式&#xff0c;包括它們的使用場景、操作解釋以及示例代碼。 1. RDD&#xff08;Resilient Distributed Dataset&#xff09;API 概述 RDD是Sp…

Linux——查找文件-find(詳細)

查找文件-find 作用 - 按照文件名、大小、時間、權限、類型、所屬者、所屬組來搜索文件 格式 find 查找路徑 查找條件 具體條件 操作 注意 - find命令默認的操作是print輸出 - find是檢索文件的&#xff0c;grep是過濾文件中字符串 參數 參數 …

簡述Vue中的數據雙向綁定原理

Vue中的數據雙向綁定原理是Vue框架的核心特性之一&#xff0c;它通過數據劫持結合發布者-訂閱者模式來實現。下面將詳細闡述Vue中數據雙向綁定的原理&#xff0c;并盡量按照清晰的結構進行歸納&#xff1a; 一、數據劫持 使用Object.defineProperty()&#xff1a; Vue在組件…

Mojo模板引擎:釋放Web開發的無限潛能

&#x1f680; Mojo模板引擎&#xff1a;釋放Web開發的無限潛能 Mojolicious是一個基于Perl的現代化、高性能的Web開發框架&#xff0c;它內置了一個功能強大的模板引擎&#xff0c;專門用于快速構建Web應用程序。Mojo的模板引擎不僅簡潔易用&#xff0c;而且具備多種高級特性…

《每天5分鐘用Flask搭建一個管理系統》第11章:測試與部署

第11章&#xff1a;測試與部署 11.1 測試的重要性 測試是確保應用質量和可靠性的關鍵步驟。它幫助開發者發現和修復錯誤&#xff0c;驗證功能按預期工作。 11.2 Flask測試客戶端的使用 Flask提供了一個測試客戶端&#xff0c;可以在開發過程中模擬請求并測試應用的響應。 …

Unity海面效果——4、法線貼圖和高光

Unity引擎制作海面效果 大家好&#xff0c;我是阿趙。 繼續做海面效果&#xff0c;上次做完了漫反射顏色和水波動畫&#xff0c;這次來做法線和高光效果。 一、 高光的計算 之前介紹過高光的光照模型做法&#xff0c;比較常用的是Blinn-Phong 所以我這里也稍微連線實現了一下 …

在線醫療診斷平臺開發教程大綱 (Java 后端,Vue 前端)—實踐篇-01

項目分析 第一部分:項目概述及技術選型 項目背景: 在線醫療診斷平臺的市場需求與發展趨勢本平臺的目標用戶和核心功能,突出解決的痛點競品分析,差異化優勢技術選型: 后端: 核心框架: Spring Boot (簡化開發流程)持久層框架: MyBatis (靈活,易于上手)數據庫: MySQL (成熟穩…

API 授權最佳實踐

API&#xff08;應用程序編程接口&#xff09;就像秘密之門&#xff0c;允許不同的軟件程序進行通信。但并不是每個人都應該擁有每扇門的鑰匙&#xff0c;就像不是每個軟件都應該不受限制地訪問每個 API 一樣。 這些 API 將從銀行的移動應用程序到您最喜歡的社交媒體平臺的所有…

英語中Would you和Could you的區分用法

Spark: 在英語中&#xff0c;“Would you”和“Could you”都是用來禮貌地提出請求或詢問的表達方式&#xff0c;但它們之間存在一定的差異&#xff1a; 語氣與禮貌程度&#xff1a; Would you&#xff1a;通常用于更正式或較為禮貌的場合&#xff0c;它體現了一種比較客氣的請…

打開wsl顯示請啟用虛擬機平臺 Windows 功能并確保在 BIOS 中啟用虛擬化。

安裝了個安卓模擬器&#xff0c;后面wsl打開后顯示這個 按照很多博客說的運行一串命令 bcdedit /set hypervisorlaunchtype auto 之后重啟電腦 沒有效果 運行 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 之后重啟成功打開 wsl 來…

某智能裝備公司如何實現多個工程師共用1臺圖形工作站

在當今快速發展的科技領域&#xff0c;資源共享和高效利用已成為企業提升競爭力的關鍵&#xff0c;特別是在工程設計和研發領域。如何最大化地利用有限的資源&#xff0c;如工作站&#xff0c;成為了許多公司面臨的挑戰。某智能裝備公司便是在這樣的背景下&#xff0c;通過云飛…

【自動駕駛汽車通訊協議】深入理解PCI Express(PCIe)技術

文章目錄 0. 前言1. PCIe簡介1.1 PCIe外觀1.2 PCIe的技術迭代 2. PCIe的通道&#xff08;lane&#xff09;配置2.1 通道配置詳解2.2 通道配置的影響 3. PCIe的架構3.1 架構層次3.2 核心組件 4. PCIe的特性5. PCIe在自動駕駛中的應用 0. 前言 按照國際慣例&#xff0c;首先聲明&…

C# --- 如何在代碼中開啟進程

C# --- 使用代碼開啟一個進程 方法一 using (Process myProcess new Process()) {myProcess.StartInfo.UseShellExecute false;// You can start any process, HelloWorld is a do-nothing example.myProcess.StartInfo.FileName "C:\\HelloWorld.exe";myProcess…

unity canvas顯示相機照射畫面的方法

1. 使用 Image 組件顯示處理后的圖像 如果你的圖像數據已經是一個 Texture2D 或 Sprite,你可以將它直接顯示在Canvas上的 Image 組件中: 創建 Sprite: 將你的 Texture2D 數據轉換為 Sprite,以便可以在 Image 組件中使用。public Sprite CreateSpriteFromTexture(Texture2D…

【產品運營】Saas的核心六大數據

國內頭部軟件公司的一季度表現慘不忍睹&#xff0c;為啥美國的還那么賺錢呢&#xff1f;其實核心是&#xff0c;沒幾個Saas產品經理是看數據的&#xff0c;也不知道看啥數據。 SaaS 行業&#xff0c;天天拋頭露面、名頭叫的響的 SaaS 產品&#xff0c;真沒有幾個賺錢的。 那為…

電子看板,幫助工廠實現數字化管理

在數字化浪潮的推動下&#xff0c;制造業正經歷著深刻的變革&#xff0c;數字工廠成為了行業發展的新趨勢。而生產管理看板作為一種重要的管理工具&#xff0c;在提升數字工廠管理效率方面發揮著關鍵作用。 生產管理看板通過實時數據的展示&#xff0c;為數字工廠提供了清晰的全…