vue3长列表优化,使用vue-virtual-scroller实现直播间弹幕列表虚拟滚动效果

news2024/12/22 9:00:59

使用的组件库是:https://github.com/Akryum/vue-virtual-scroller 

官方文档:vue-virtual-scroller

安装依赖

npm install --save vue-virtual-scroller@next


pnpm install --save vue-virtual-scroller@next


yarn 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>
  <RecycleScroller
    class="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.coloradmin.cn/o/1887953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用MySQL+node+vue做一个学生信息管理系统(四):制作增加、删除、修改的组件和对应的路由

1.下载依赖&#xff1a; npm install vue-router 在src目录下新建一个文件夹router&#xff0c;在router文件夹下新建一个文件router.js文件,在component目录下新建增加删除和修改的组件&#xff0c;引入router.js当中 此时的init组件为主页面&#xff08;&#xff08;二、三&…

在昇腾服务器上使用llama-factory对baichuan2-13b模型进行lora微调

什么是lora微调 LoRA 提出在预训练模型的参数矩阵上添加低秩分解矩阵来近似每层的参数更新&#xff0c;从而减少适配下游任务所需要训练的参数。 环境准备 这次使用到的微调框架是llama-factory。这个框架集成了对多种模型进行各种训练的代码&#xff0c;少量修改就可使用。 …

怎样把热门抖音短视频下载保存到手机相册?

怎样把热门抖音短视频下载保存到手机相册? 1、在手机上打开抖音短视频APP&#xff1b; 2、打开后搜索或找到要下载保存的抖音短视频&#xff1b; 3、打开短视频后&#xff0c;点击右则的分享&#xff0c;并滑动找到保存到相册&#xff1b; 4、点击后等待完成下载&#xff0c;…

linux高级编程(9)进程间通信

2的信号量集就是semaphore 这个图很重要&#xff01;&#xff01;&#xff01; 无名管道&#xff1a; 练习一&#xff1a;读操作 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> int ma…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(六)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

【C语言】inline 关键字

在C语言中&#xff0c;inline关键字用于建议编译器对函数进行内联展开&#xff0c;而不是像普通函数一样调用。内联函数的目的是减少函数调用的开销&#xff0c;特别是对于简单的、频繁调用的函数。 内联函数的定义和使用 定义内联函数 要定义一个内联函数&#xff0c;需要在…

小红书运营教程02

小红书大致会分享10篇左右。微博、抖音、以及视频剪辑等自媒体运营相关技能以及运营教程相关会陆续的进行分享。 上次分享涉及到的对比,母婴系列,或者可以说是服装类型,不需要自己过多的投入,对比知识类博主来说,自己将知识讲述出来,然后要以此账号进行变现就比较麻烦,…

认识一下HttpMessageHandler处理管道

[S1208]HttpClient的默认管道结构 接下来我们通过如下的演示程序使用IHttpClientFactory工厂创建了 一个HttpClient对象&#xff0c;并查看其管道依次由哪些类型的HttpMessageHandler对象组成。如代码片段所示&#xff0c;我们定义了一个辅助方法PrintPipeline方法以递归的形式…

我等你,就在微软头马Open House开放日

当众讲话一直是我职业生涯中的重要部分&#xff0c;MSTMC 头马俱乐部更是我成长路上的重要伙伴。今天&#xff0c;我诚挚地邀请你参加即将在北京微软大厦举行的 微软头马Open House开放日活动&#xff01; 活动详情&#xff1a; &#x1f4c5; 日期&#xff1a;2024年7月3日&am…

Python 作业题1 (猜数字)

题目 你要根据线索猜出一个三位数。游戏会根据你的猜测给出以下提示之一&#xff1a;如果你猜对一位数字但数字位置不对&#xff0c;则会提示“Pico”&#xff1b;如果你同时猜对了一位数字及其位置&#xff0c;则会提示“Fermi”&#xff1b;如果你猜测的数字及其位置都不对&…

AI姓氏头像生成微信小程序系统源码

&#x1f525;【科技新潮流】AI姓氏头像生成系统&#xff0c;你的专属个性新名片&#xff01;&#x1f389; &#x1f31f; 开篇惊艳&#xff1a;一键解锁你的姓氏魅力 ✨ Hey小伙伴们&#xff0c;今天我要安利一个超酷炫的科技小玩意——AI姓氏头像生成系统&#xff01;是不…

API 授权最佳实践

API&#xff08;应用程序编程接口&#xff09;就像秘密之门&#xff0c;允许不同的软件程序进行通信。但并不是每个人都应该拥有每扇门的钥匙&#xff0c;就像不是每个软件都应该不受限制地访问每个 API 一样。 这些 API 将从银行的移动应用程序到您最喜欢的社交媒体平台的所有…

python机器人编程——用pytorch实现六轴机械臂的正向和逆向数值解算,及python算法解析

目录 一、前言二、实现原理2.1正向建模2.2张量化2.3绘制3D动画及操作UI 三、结论四、python源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 一、前言 前面对六轴&#xff08;或多轴&#xff09;机械臂进行了一些研究&#x…

SCI一区级 | Matlab实现BO-Transformer-LSTM时间序列预测

SCI一区级 | Matlab实现BO-Transformer-LSTM时间序列预测 目录 SCI一区级 | Matlab实现BO-Transformer-LSTM时间序列预测效果一览基本介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/caef5d232c4b436ebb01d717819d5ff1.png)程序设计参考资料 效果一览 基本介绍…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

【Linux】生物信息学常用命令

参考资料来自生信技能树 先输入echo export PS1"[\033]2;\h:\u \w\007\033[33;1m]\u \033[35;1m\t\033[0m [\033[36;1m]\w[\033[0m]\n[\e[32;1m]$ [\e[0m]" >> ~/.bashrc 再输入source ~/.bashrc就能够让命令字体带上颜色&#xff0c;同时命令将会在下一行开…

Spark on k8s 源码解析执行流程

Spark on k8s 源码解析执行流程 1.通过spark-submit脚本提交spark程序 在spark-submit脚本里面执行了SparkSubmit类的main方法 2.运行SparkSubmit类的main方法&#xff0c;解析spark参数&#xff0c;调用submit方法 3.在submit方法里调用doRunMain方法&#xff0c;最终调用r…

LiveNVR监控流媒体Onvif/RTSP用户手册-视频广场:状态记录、播放、回放入口、筛选在线离线、搜索

LiveNVR监控流媒体Onvif/RTSP用户手册-视频广场:状态记录、播放、回放入口、筛选在线离线、搜索 1、视频广场1.1、搜索筛选1.2、状态记录1.3、播放1.4、视频信息1.5、回放入口 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、视频广场 1.1、搜索筛选 可以下拉筛选 在线、离线 &a…

小红书 达芬奇:生活问答 AI 机器人

小红书去年 9 月开始内测的生活问答 AI 机器人&#xff1a;达芬奇&#xff0c;现在可以在小红书 APP 上用了 得益于小红书平台的特性&#xff0c;该助手擅长吃、住、宠、喝、学等等各类生活知识&#xff0c;目前还在搞活动&#xff0c;写评测笔记最高得 666 元

《后端程序猿 · 基于 Lettuce 实现缓存容错策略》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;如需交流&#xff…