【Vue】自定义滚动条

news/2025/3/31 9:21:28/文章来源:https://www.cnblogs.com/zwj/p/18797492

image

  <!-- 滚动条开始 --><div class="custom-scrollbar-container"><!-- 添加左右箭头按钮 --><div class="scroll-arrow left-arrow" @click="scrollBy(-100)"><i class="iconfont"style="transform: rotate(-90deg);display: inline-block;font-size: 24px;font-weight: 500;color:#8B8B8B ;">&#xe874;</i></div><div class="scroll-arrow right-arrow" @click="scrollBy(100)"><i class="iconfont"style="transform: rotate(90deg);display: inline-block;font-size: 24px;font-weight: 500;color:#8B8B8B">&#xe874;</i></div><div class="custom-scrollbar-track"><div class="custom-scrollbar-thumb" @mousedown="startDrag" :style="{width: `${scrollThumbWidth}px`,left: `${scrollThumbLeft}px`}"></div></div></div><!-- 滚动条结束 -->
/* 自定义滚动条 */
.custom-scrollbar-container {/* 右对齐 */right: 0;position: absolute;bottom: 64px;width: calc(100% - 140px);height: 10px;background: #f8f8f8;border-radius: 5px;overflow: hidden;z-index: 1;
}.custom-scrollbar-track {height: 100%;position: relative;
}.custom-scrollbar-thumb {height: 100%;background: #a0a0a0;border-radius: 5px;width: 30%;/* 根据实际内容动态调整 */transition: background 0.2s;position: absolute;cursor: pointer;transition: left 0.2s ease;
}.custom-scrollbar-thumb:hover {background: #808080;
}.scroll-arrow {position: absolute;top: 0;height: 100%;width: 15px;margin: 0;padding: 0;background: #f8f8f8;display: flex;align-items: center;justify-content: center;cursor: pointer;z-index: 1;&:hover {background: #e8e8e8;}svg {fill: #A0A0A0;}
}.left-arrow {left: 0;
}.right-arrow {right: 0;
}.custom-scrollbar-track {position: absolute;left: 15px;right: 15px;height: 100%;
}
// 自定义滚动条配置开始
const tableRef = ref();
const scrollPos = ref(0);
const scrollThumbWidth = ref(200);
const scrollThumbLeft = ref(0);
// 滚动条拖动逻辑
// Update the startDrag function
const startDrag = (e) => {e.preventDefault();if (!tableRef.value) return;const thumb = document.querySelector('.custom-scrollbar-thumb');const track = document.querySelector('.custom-scrollbar-track');const table = tableRef.value.$el?.querySelector('.ant-table-body');if (!table || !track) return;const trackRect = track.getBoundingClientRect();let startX = e.clientX;let startLeft = thumb.offsetLeft;const onMouseMove = (e) => {const deltaX = e.clientX - startX;let newLeft = startLeft + deltaX;const maxLeft = trackRect.width - thumb.offsetWidth;newLeft = Math.max(0, Math.min(newLeft, maxLeft));const scrollWidth = table.scrollWidth - table.clientWidth;table.scrollLeft = (newLeft / maxLeft) * scrollWidth;// 强制更新样式thumb.style.left = `${newLeft}px`;};const onMouseUp = () => {document.removeEventListener('mousemove', onMouseMove);document.removeEventListener('mouseup', onMouseUp);};document.addEventListener('mousemove', onMouseMove);document.addEventListener('mouseup', onMouseUp);
};// 表格滚动同步逻辑
const onTableScroll = (e) => {const table = e.target;const scrollWidth = table.scrollWidth - table.clientWidth;const trackWidth = document.querySelector('.custom-scrollbar-track')?.offsetWidth || 0;if (scrollWidth > 0 && trackWidth > 0) {const ratio = table.scrollLeft / scrollWidth;// 使用实时计算的滑块宽度const currentThumbWidth = (table.clientWidth / table.scrollWidth) * trackWidth;scrollThumbWidth.value = Math.max(20, currentThumbWidth);// 直接计算绝对位置scrollThumbLeft.value = ratio * (trackWidth - currentThumbWidth);}
};
// 滚动条的箭头
const scrollBy = (delta) => {if (!tableRef.value) return;const table = tableRef.value.$el?.querySelector('.ant-table-body');if (!table) return;const newScrollLeft = table.scrollLeft + delta;table.scrollLeft = Math.max(0, Math.min(newScrollLeft, table.scrollWidth - table.clientWidth));onTableScroll({ target: table }); // 更新滑块位置
};// 自定义滚动条配置结束

本代码由 Trae AI 编辑器(DeepSeek-Reasoner R1)生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/907023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重庆软航NTKO WebOffice控件在谷歌Chrome 133版提示扩展已停用解决方案!

NTKO WebOffice‌是重庆软航公司的一款能够在浏览器中直接编辑Microsoft Office、WPS、金山电子表等文档的控件,支持Word、Excel等多种文档格式。该控件能够在IE、Chrome等浏览器中运行,并支持强制痕迹保留、禁止拷贝、模版套红、全文批注等功能‌。 但是软航NTKO WebOffice‌…

5个关键步骤优化IPD流程实施效果

IPD(Integrated Product Development)流程即集成产品开发流程,是一套产品开发的模式、理念与方法。它强调将产品开发视为一个完整的流程,涵盖从市场需求分析、产品规划、设计开发到生产制造、上市销售等各个环节,旨在通过跨部门的团队协作,高效、高质量地推出满足市场需求…

VirtualBox安装Ubuntu教程

下载 VirtualBox官方下载非老旧电脑还是推荐VMware,性能好一些,现在也免费了。官网下载 官网下载慢的话,可以使用我下载好的 Ubuntu清华镜像下载根据自己电脑类型选择下载! 安装完成后 创建 控制 -> 新建等待...... 登录

PLM软件实施最佳实践:企业如何高效落地?

PLM(Product Lifecycle Management)软件,即产品生命周期管理软件,旨在助力企业对产品从概念设计到退役处理的全生命周期进行有效管理。通过整合产品数据、流程以及人员,PLM软件能显著提升企业的创新能力、生产效率并降低成本。然而,PLM软件的实施并非易事,众多企业在落地…

HTTP500代码怎么解决?常见的5xx网页错误及其原因

要修复5xxx错误,您需要解决服务器上导致该错误的问题,这可能需要代码调试、配置更新或安装新的系统组件,接下来为大家带来HTTP 500错误的解决方法,和常见的5xx网页错误及其原因。错误 500 是什么? HTTP 500 响应代码并不表示实际问题,它只是通知您服务器出现了问题。 内部…

Vue 插槽 slot-scope=scope

============================================================== 默认插槽 只有一个slot 具名插槽 当有多个slot时,每个slot有名字的插槽(name) 只有template才能用v-slot 【这个是新设计的技术 Vue2.6以后用的】作用域插槽 反向传数据 App.vue中,必须用 template 数…

VMware Workstation不支持的硬件版本,模块Upgrade启动失败

1、我是从高版本的VMware Workstation降级后,再打开之前的虚拟机报错如下 2、打开虚拟机文件目录,用文本打开虚拟机的 .vmx文件,搜索定位到 virtualHW 字段,修改该字段为自己当前VMware版本,然后保存并开机

Next.js中间件权限绕过漏洞分析(CVE-2025-29927)

本文代码版本为next.js-15.2.2 本篇文章首发在先知社区:https://xz.aliyun.com/news/17403 一、漏洞概述 CVE-2025-29927是Next.js框架中存在的一个高危中间件逻辑绕过漏洞,允许攻击者通过构造特定HTTP请求头,绕过中间件的安全控制逻辑(如身份验证、路径重写、CSP防护等)。…

vue+openlayers示例:线水流效果(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:推荐v16+。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: …

蓝屏STOP:0x0000007B

生产线需要,得准备一台Windows XP的操作系统电脑。在安装时,出现下面蓝屏,A problem has been detected and windows has been shut down to prevent damage to your computer. If this is the first time youve seen this stop error screen, restart your computer. If th…

必看!2025 年颠覆测试行业的 10 大 AI 自动化测试工具/平台(上篇)

大家好,我是狂师。 上周小孩子生病,住院照顾,停更了几天。 各位看官,等着急了吧,之前有粉丝后台留言,想了解学习一下,AI这么火爆,那市面上AI与自动化测试结合起来的有哪些推荐的工具/平台。 今天就这个话题来聊一聊。 前言 在软件迭代以“天”为单位的今天,随着软件迭…

2025年企业必读指南:文件摆渡系统的5大核心功能

在数字化转型的浪潮中,企业面临着前所未有的挑战与机遇。优化信息流转、提升协作效率、确保数据安全及合规性,已成为企业持续发展的关键要素。在这一背景下,文件摆渡系统作为连接不同网络、网域之间的桥梁,承担着文件传输、共享、管理和归档等多重任务,其重要性日益凸显。…