《ElementUI 基础知识》el-tabs header 监听鼠标中键滚动时左右滑动(ElementPlus同样适用)

前言

收到需求,可监听 el-tabs 头在鼠标 hover 时。滑动鼠标中键,可左右滑动!

效果

  • 鼠标中键上下滑动时;
  • 向上滑,向左移动;
  • 向下滑,向右移动;

实现

  • 代码56 - 60行,添加鼠标中键滑动监听事件;
  • 代码61 - 65行,删除鼠标中键滑动监听事件;
  • 代码24 - 54行,实现滑动;
vue 复制代码
<template>
	<div>
		<el-tabs id="myTabs" v-model="activeName" type="card" >
			<el-tab-pane label="用户管理" name="first">用户管理</el-tab-pane>
			<el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>
			<el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>
			<el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>
			<el-tab-pane label="测试01" name="01">测试01</el-tab-pane>
			<el-tab-pane label="测试02" name="02">测试02</el-tab-pane>
			<el-tab-pane label="测试03" name="03">测试03</el-tab-pane>
			<el-tab-pane label="测试04" name="04">测试04</el-tab-pane>
		</el-tabs>
	</div>
</template>
<script>
export default {
	data() {
		return {
			activeName: 'first',
			currentScrollLeft: 0,
		};
	},
	methods: {
        tabsMouseWheel(event) {
            // 阻止默认行为(例如,阻止页面自动滚动)  
            event.preventDefault();  

            // tabs scroll
            const el = event.currentTarget.getElementsByClassName('el-tabs__nav-scroll')[0];

            // 最大left:scrollWidth - 上一级的宽度。注意是scrollWidth
            const maxLeft = el.scrollWidth - el.offsetWidth;
            
            // 设置每次滚动的移动量
            const speed = 30;   
            if (event.deltaY < 0) {  
                // 向上滚动,向左移动div  
                this.currentScrollLeft -= speed;  
            } else {  
                // 向下滚动,向右移动div  
                this.currentScrollLeft += speed;  
            } 

            // 保证scrollLeft不会小于0  
            if (this.currentScrollLeft < 0) {  
                this.currentScrollLeft = 0;  
            } 
            else if(maxLeft < this.currentScrollLeft) {// 不会大于最大 srcollLeft
                this.currentScrollLeft = maxLeft;
            }

            // 更新div的位置  
            el.scrollLeft = this.currentScrollLeft; 
        },
	},
	mounted() {
        // 添加监听
		const navScrollEl = document.querySelector('#myTabs .el-tabs__header');
		navScrollEl.addEventListener('wheel', this.tabsMouseWheel);
	},
	beforeDestroy() {
        // 删除监听
        const navScrollEl = document.querySelector('#myTabs .el-tabs__header');
        navScrollEl.removeEventListener('wheel', this.tabsMouseWheel);
    }
};
</script>
<<style lang="stylus">
#myTabs {
	width: 350px;
}
</style>
相关推荐
Liu.7742 天前
Vue3结合Element Plus封装点击查看大图的自定义指令
javascript·vue.js·elementui
跟着珅聪学java3 天前
Element UI 的 Tabs 标签页开发教程
javascript·vue.js·elementui
不是山谷.:.4 天前
Axios的【接口防抖 + 请求失败重试 + 弱网提示】三合一高阶版封装
前端·javascript·vue.js·笔记·elementui·typescript
镜宇秋霖丶9 天前
2026.5.12@霖宇博客制作中遇见的问题
前端·vue.js·elementui
镜宇秋霖丶12 天前
2026.5.10@霖宇博客制作中遇见的问题
前端·vue.js·elementui
莫生灬灬12 天前
ElementUI封装 共91个组件 支持易语言/火山/C#/Python
开发语言·c++·python·ui·elementui·c#
镜宇秋霖丶14 天前
2026.5.8@霖宇博客制作中遇见的问题
前端·vue.js·elementui
MXN_小南学前端14 天前
Vue + Element UI 分页器封装:比直接用 el-pagination 更省心的通用方案
javascript·vue.js·elementui
invicinble14 天前
前端框架使用vue-cli( 第二层:工程配置层--elementui需要做的基础配置)
vue.js·elementui·前端框架
周bro17 天前
vue2+element ui 中的el-table表格 选中当前行当前行变色,单选/多选--------续集:表格样式修改整合
vue.js·ui·elementui