码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Fabric.js+vue 实现鼠标滚轮缩放画布+移动画布


    话不多说 直接贴代码


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

    1. // 可以实现鼠标滚轮缩放 最小为原来的百分之一,最大为原来的20倍
    2. canvas.on('mouse:wheel', function (opt) {
    3. var delta = opt.e.deltaY
    4. var zoom = canvas.getZoom()
    5. zoom *= 0.999 ** delta
    6. if (zoom > 20) zoom = 20
    7. if (zoom < 0.01) zoom = 0.01
    8. this.setZoom(zoom)
    9. opt.e.preventDefault()
    10. opt.e.stopPropagation()
    11. })

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


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

    1. // 鼠标按下事件
    2. canvas.on('mouse:down', function (e) {
    3. this.panning = true
    4. canvas.selection = false
    5. })
    6. // 鼠标抬起事件
    7. canvas.on('mouse:up', function (e) {
    8. this.panning = false
    9. canvas.selection = true
    10. })
    11. // 移动画布事件
    12. canvas.on('mouse:move', function (e) {
    13. if (this.panning && e && e.e) {
    14. var delta = new fabric.Point(e.e.movementX, e.e.movementY)
    15. canvas.relativePan(delta)
    16. }
    17. })

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

    原理,通过偏移量

    添加 鼠标为缩放原点:
     

    1. "mouse:wheel": (e) => {
    2. this.zoom = (event.deltaY > 0 ? -0.1 : 0.1) + canvas.getZoom();
    3. this.zoom = Math.max(0.1, this.zoom); //最小为原来的1/10
    4. this.zoom = Math.min(3, this.zoom); //最大是原来的3倍
    5. this.zoomPoint = new fabric.Point(e.pointer.x,e.pointer.y);
    6. canvas.zoomToPoint(this.zoomPoint, this.zoom);
    7. this.lastzoomPoint.x = this.lastzoomPoint.x + (this.zoomPoint.x - this.lastmousePoint.x - this.relativeMouseX) / this.lastzoom
    8. this.lastzoomPoint.y = this.lastzoomPoint.y + (this.zoomPoint.y - this.lastmousePoint.y - this.relativeMouseY) / this.lastzoom
    9. this.lastmousePoint.x = this.zoomPoint.x
    10. this.lastmousePoint.y = this.zoomPoint.y
    11. this.lastzoom = this.zoom
    12. this.tempmouseX = this.relativeMouseX
    13. this.tempmouseY = this.relativeMouseY
    14. this.relativeMouseX = 0
    15. this.relativeMouseY = 0
    16. },
    17. ————————————————
    18. 版权声明:本文为CSDN博主「qq_38860536」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    19. 原文链接:https://blog.csdn.net/qq_38860536/article/details/104759042

  • 相关阅读:
    【Java技术专题】「Java8技术盲区」函数接口字典-看看还有哪些你所不知道函数接口
    LeetCode·297.二叉树的序列化与反序列化·DFS·BFS
    node.js云学堂微信小程序学习系统的设计与实现毕业设计源码011735
    chrome extensions mv3通过content scripts注入/获取原网站的window数据
    spark-submit 高频可选参数及作用
    python 异常
    基于Springboot实现旧物置换网站平台演示【项目源码+论文说明】分享
    基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证
    网络安全攻防对抗之隐藏通信隧道技术整理
    QFramework简介
  • 原文地址:https://blog.csdn.net/Thea12138/article/details/132716209
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号