千家信息网

如何使用Vue实现一个简单的鼠标拖拽滚动效果插件

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了如何使用Vue实现一个简单的鼠标拖拽滚动效果插件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。演示事例最近在做一个新
千家信息网最后更新 2026年11月01日如何使用Vue实现一个简单的鼠标拖拽滚动效果插件

这篇文章主要介绍了如何使用Vue实现一个简单的鼠标拖拽滚动效果插件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

演示事例

最近在做一个新的项目,有个需要是这样的:

简单描述一下,就是鼠标拖动页面,整个页面会随着的鼠标的拖拽而移动,如果页面有内容,里面的内容也需要跟着拖动的外层整体移到。

一开始没啥思路,所以就发了个朋友圈,得到的答案挺多的,主要还是用拖拽之类的,但这个拖拽只是单个元素的拖动,我想要的整个视图的拖动。

这里线索又断了。

于是又回到飞书有类似功能的页面,然后仔细检查一下它页面的 DOM 结构,如下所示:

发现有这一层,它把页面设置的很宽,很高,为了隐藏滚动条,所以设置overflow: hidden;,看了这一设置,突然灵光一现,难道它是用拖拽来触发滚动条的滚动,在细想,哇靠,这思路可行的,NB。

准备上手试试

创建一个 vue 项目,这个就不细说的,我已经把原码发布到 github 上了,有兴趣自己看看:

https://github.com/qq449245884/vue-drag-scroll

首先给外层加个大大的宽和高:

// 这里省略一些不太重要的代码

这里设置了一个计算属性 zoomStye,主要使用就是给外层加一个在的宽,和高,这里我还设置了一个缩放比较,为了是能放大缩小页面,下面讲。运行效果:

接着,我们需要监听鼠标的拖拽来触发滚动条效果,因为需要对 dom 的操作,所以这里把拖拽处理逻辑用 vue 指令封装起来,这样后面有需要,只要使用该指令即可。

注意:在 vue 中如果需要对 dom 进行多次操作,最好是把它封装在指令中。

指令代码如下:

import Vue from 'vue'  Vue.directive('dragscroll', function (el) {   el.onmousedown = function (ev) {     console.log(el)     const disX = ev.clientX     const disY = ev.clientY     const originalScrollLeft = el.scrollLeft     const originalScrollTop = el.scrollTop     const originalScrollBehavior = el.style['scroll-behavior']     const originalPointerEvents = el.style['pointer-events']     // auto: 默认值,表示滚动框立即滚动到指定位置。     el.style['scroll-behavior'] = 'auto'     el.style['cursor'] = 'grabbing'     // 鼠标移动事件是监听的整个document,这样可以使鼠标能够在元素外部移动的时候也能实现拖动     _document.onmousemove = function (ev) {       ev.preventDefault()       // 计算拖拽的偏移距离       const distanceX = ev.clientX - disX       const distanceY = ev.clientY - disY        el.scrollTo(originalScrollLeft - distanceX, originalScrollTop - distanceY)       console.log(originalScrollLeft - distanceX, originalScrollTop - distanceY)       // 由于我们的图片本身有点击效果,所以需要在鼠标拖动的时候将点击事件屏蔽掉       el.style['pointer-events'] = 'none'       document.body.style['cursor'] = 'grabbing'     }     _document.onmouseup = function () {       _document.onmousemove = null       _document.onmouseup = null       el.style['scroll-behavior'] = originalScrollBehavior       el.style['pointer-events'] = originalPointerEvents       el.style['cursor'] = 'grab'     }   } })

这里的主要思路就是利用 el.scrollTo 来触发滚动条的移到。

有了 dragscroll 指令,我们来使用一下,首先我们需要在增加一层外层:

// 这里省略一些不太重要的代码

// 这里省略一些不太重要的代码 这里需要注意的在 .vue-drag-scroll-out-wrapper 要设置 overflow 值,否则无法滚动(测试出来的)。

这样拖拽效果就出来啦:

增加缩放

这里,我们增加一个视图的放大和缩小,所以增加两个按钮:

{{scale}}%

效果:

这里的放大和缩小的逻辑就是通过我们增加减少 scale 来实现

handleReduce () {   if (this.scale === 25) return   this.scale -= 25 }, handleEnlarge () {   if (this.scale === 100) return   this.scale += 25 }

缩放比例的关系就是开关给出的代码:

const INIT_WIDTH = 2208 const INIT_HEIGHT = 1206 const width = INIT_WIDTH * (1 + (100 - this.scale)/100) const height = INIT_HEIGHT * (1 + (100 - this.scale)/100)

这个比例是我自己定的,比如现在减少到 75% ,那么最外层的高和宽就要对应的增加原来的 25%,因为缩放就是视野上的缩小,对应的距离就是拉宽。

最后就是使用 CSS 的 transform 来做缩放:

transform: `scale(${this.scale/100})`

最终的效果:

感谢你能够认真阅读完这篇文章,希望小编分享的"如何使用Vue实现一个简单的鼠标拖拽滚动效果插件"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

效果 鼠标 就是 页面 代码 外层 指令 篇文章 重要 思路 移动 插件 事件 元素 兴趣 内容 时候 朋友 比例 视图 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 贷财互联网科技 广州互联网络科技有限公司 奇士达互联网科技 菲比寻常互联网科技 顺玮阁互联网科技 兼蜜互联网科技 成都狮子座互联网科技 恒银科技与互联网金融 团飞科技与伯堂互联网服务平台 厦门比较好的科技互联网公司 哈尔滨屹滨互联网科技有限公司 本届互联网博览会上的黑科技 内蒙古九一互联网科技 互联网企业科技类企业如何做账 广州富喜互联网络科技 江苏互联网智能科技产品出厂价 国产互联网科技公司 安徽零酒互联网科技有限公司 互联网金融金融科技 互联网科技的 阿里互联网科技公司 伊宁互联网科技做什么的 区块链结合互联网科技 山东有哪些互联网科技公司 互联网科技手机排行榜 长沙渺峰互联网科技有限公司 北京军民互联网科技公司 恒生科技指数 中概互联网 重庆科技产业互联网有哪些
0