当前位置: 首页 > news >正文

fabricjs 整合 vue3-sketch-ruler 实现标尺功能

版本信息

fabricjs版本为6.7.1 ------  vue3-sketch-ruler的版本为1.3.15
引入标尺的部分代码
<!-- 画布区域 -->
  <div id="workspace" style="width: 100%;height: 100%; position: relative; background: #f1f1f1"><Ruler :editor="editor" :event="event"></Ruler><canvas id="canvas" :class="state.ruler ? 'design-stage-grid' : ''"></canvas><Dom v-if="state.show"></Dom><ClickMenu v-if="state.show"></ClickMenu></div>

  vue3-sketch-ruler标尺封装代码

<template><SketchRule :thick="ruleOption.thick" :scale="ruleOption.scale" :width="ruleOption.width":height="ruleOption.height" :shadow="ruleOption.shadow" :autoCenter="ruleOption.autoCenter":start-x="ruleOption.startX" :start-y="ruleOption.startY" :palette="ruleOption.palette":isShowReferLine="ruleOption.isShowReferLine" :lines="ruleOption.lines"><slot></slot></SketchRule>
</template><script lang="ts" setup>
import { ref, nextTick } from 'vue'
import SketchRule from 'vue3-sketch-ruler'
import 'vue3-sketch-ruler/lib/style.css'
import { ZoomEvent } from '@/enums/editorEnum';
import CanvasEventEmitter from '@/core/CanvasEventEmitter';
import Editor from '@/core';const props = defineProps<{event: CanvasEventEmitter,editor: Editor | undefined
}>()const ruleOption = ref({scale: 1, //初始化标尺的缩放 通过设置值,改变刻度尺的大小autoCenter: false, //缩放时是否自动居中对齐startX: 0, //水平标尺的起始刻度startY: 0, //垂直标尺的起始刻度    lines: { h: [], v: [], }, //不能直接写{}不然删除有问题
    shadow: {x: 0,y: 0,width: 0,height: 0,},width: 0,height: 0,ratio: 1,thick: 16, //标尺的厚度 isShowRuler: true,isShowReferLine: true,palette: {bgColor: '#FFF', // 画布背景longfgColor: '#BABBBC', // 长刻度颜色shortfgColor: '#C8CDD0',fontColor: '#333', // 刻度文字颜色shadowColor: '#ccc', // 参考线颜色lineColor: '#33aaff',borderColor: '#DADADC',cornerActiveColor: 'rgba(255,255,255, 0)',lineType: 'solid'       // 参考线类型(solid/dashed/dotted)
    },
})const initRuler = () => {
   //标尺的边框 pxconst borderWidth
= 1
   //画布元素const workspaceEl = document.querySelector('#workspace') as HTMLElement;ruleOption.value.width = workspaceEl.offsetWidth - ruleOption.value.thick - borderWidthruleOption.value.height = workspaceEl.offsetHeight - ruleOption.value.thick - borderWidth} //画布缩放标尺进行缩放 const handleEditorZoom = () => {const transform = props.editor!.canvas.viewportTransformruleOption.value.scale = transform[0]
   //减去标尺16px 缩放后的宽度ruleOption.value.startX
= -(transform[4] / transform[0] - 16 / transform[0])ruleOption.value.startY = -(transform[5] / transform[3] - 16 / transform[0])props.editor!.updateDomComponents();console.log(transform) }nextTick(() => {props.event.on(ZoomEvent.ZOOMING, handleEditorZoom);initRuler(); })</script>

 

http://www.jsqmd.com/news/38694/

相关文章:

  • 2025年真空耙式干燥机定做厂家权威推荐榜单:真空单锥螺带干燥机/沸腾床干燥机/闪蒸干燥机源头厂家精选
  • 基础查找算法(三)二分查找
  • 2025年软像套电缆订做厂家权威推荐榜单:补偿电缆/矿物质电缆/电力电缆源头厂家精选
  • 2025年济南统招专升本学校权威推荐榜单:专升本机构报名/全日制专升本/专升本考试培训学校精选
  • 一些水题
  • (3)Bug篇 - 详解
  • 西林瓶灌装轧盖机:黔东南折旧年限与成本解析
  • list对象 集合 和 String 互转
  • 碎碎念(二四)
  • 高精度除法模板(p1480)
  • 如何完成一个简单的rust WebAssembly调用
  • 焊接工业机器人节气装置
  • 详细介绍:考研408--组成原理--day1
  • 深入解析:海尔 Haier Master 智能家居网关安装 Home Assistant 实践指南
  • 枣庄西林瓶灌装轧盖机:SIP灭菌快,自动冷却高效
  • 【Nano Banana超详细教程】AI绘图神器Gemini 2.5实测:一键生成神图!
  • 已完成今日基础缩索大学习
  • 配置ElactisSearch跨域
  • 西林瓶粉末灌装机:塔城培训服务免费提供
  • Ubuntu设置中文智能拼音输入法
  • 一份用pyhon生成word/wps文档的代码2
  • 200粉粉福
  • 【chrome】chrome浏览器OptGuideOnDeviceModel模型占用磁盘空间的解决方法!
  • 这样的算作“全栈技术”吗?
  • 2025-11-12 aoao Round2 赛后总结
  • 商丘西林瓶灌装线:人员更替需再培训?费用明晰
  • vue3+ts实现页面滚动位置的保存及恢复
  • SAP屏幕增强自定义界面字段使用自定义搜索帮助方法
  • 南大-操作系统-绿导师原谅你了
  • 昌都西林瓶粉末灌装机:远程可控,手机电脑轻松操作