Fabric.js+vue 实现鼠标滚轮缩放画布+移动画布

话不多说 直接贴代码

一、实现鼠标滚轮缩放画布

javascript 复制代码
// 可以实现鼠标滚轮缩放 最小为原来的百分之一,最大为原来的20倍
    canvas.on('mouse:wheel', function (opt) {
      var delta = opt.e.deltaY
      var zoom = canvas.getZoom()
      zoom *= 0.999 ** delta
      if (zoom > 20) zoom = 20
      if (zoom < 0.01) zoom = 0.01
      this.setZoom(zoom)
      opt.e.preventDefault()
      opt.e.stopPropagation()
    })

使用说明,我的canvas画布定义为 canvas,替他均不用额外设置变量。canvas = new fabric.Canvas('editorCanvas', {...

二、实现鼠标按下变抓手,并可移动画布中内容

javascript 复制代码
// 鼠标按下事件
    canvas.on('mouse:down', function (e) {
      this.panning = true
      canvas.selection = false
    })
    // 鼠标抬起事件
    canvas.on('mouse:up', function (e) {
      this.panning = false
      canvas.selection = true
    })
    // 移动画布事件
    canvas.on('mouse:move', function (e) {
      if (this.panning && e && e.e) {
        var delta = new fabric.Point(e.e.movementX, e.e.movementY)
        canvas.relativePan(delta)
      }
    })

使用说明:data中定义panning: false,用来标记鼠标按下状态(是否鼠标按下)。

原理,通过偏移量

相关推荐
郝某人一生平安17 分钟前
前端 Word 模板参入特定数据 并且下载
前端·vue.js
_一条咸鱼_19 分钟前
深入剖析 Vue 过滤器模块(十三)
前端·javascript·面试
独立开阀者_FwtCoder20 分钟前
一口气讲清楚:LLM、MCP、EMB
前端·javascript·人工智能
bnnnnnnnn24 分钟前
做了个 Vue3 上传大文件的项目,顺手搞懂了 OSS、Pinia 和断点续传
前端·javascript·vite
独立开阀者_FwtCoder25 分钟前
Cursor MCP推荐
前端·javascript·人工智能
MrsBaek36 分钟前
前端笔记-JavaScript部分(中)
前端·javascript·笔记
—Qeyser1 小时前
用 Deepseek 写的uniapp油耗计算器
前端·vue.js·gpt·chatgpt·uni-app·gpt-3·deepseek
拖孩1 小时前
【Nova UI】九、打造组件库第一个组件-图标组件(中):属性、功能与样式的完美融合
前端·javascript·vue.js
骑自行车的码农1 小时前
JavaScript柯里化的实现
javascript
风兮w1 小时前
插件架构实践
前端·javascript·架构