Bladeren bron

fix: 修改画布尺寸变化监听

liaojiaxing 10 maanden geleden
bovenliggende
commit
f885951cfa
1 gewijzigde bestanden met toevoegingen van 42 en 22 verwijderingen
  1. 42 22
      src/views/designer/component/Scaleplate.vue

+ 42 - 22
src/views/designer/component/Scaleplate.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="scaleplate">
+  <div class="scaleplate" id="scaleplate">
     <!-- 显示/隐藏参考线 -->
     <div class="refer-line-img" @click="showReferLine = !showReferLine">
       <EyeFilled v-if="showReferLine" />
@@ -39,11 +39,15 @@
       v-for="item in stageStore.getReferLines"
       v-show="showReferLine"
       :key="item.key"
-      :style="{left: item.x + 'px', top: item.y + 'px'}"
+      :style="{ left: item.x + 'px', top: item.y + 'px' }"
       :class="item.type === 'horizontal' ? 'refer-line-h' : 'refer-line-v'"
       @dblclick="projectStore.removeReferLine(item.key)"
     >
-      <UseDraggable @move="(position, event) => handleDragReferLine(position, event, item.key)">
+      <UseDraggable
+        @move="
+          (position, event) => handleDragReferLine(position, event, item.key)
+        "
+      >
         <span class="refer-line__txt">{{ item.value }}px</span>
         <span class="refer-line__line"></span>
       </UseDraggable>
@@ -54,7 +58,10 @@
       :class="
         virtualReferLine.type === 'horizontal' ? 'refer-line-h' : 'refer-line-v'
       "
-      :style="{left: virtualReferLine.x + 'px', top: virtualReferLine.y + 'px'}"
+      :style="{
+        left: virtualReferLine.x + 'px',
+        top: virtualReferLine.y + 'px',
+      }"
       v-show="virtualReferLine.type"
     >
       <span class="refer-line__txt">{{ virtualReferLine.value }}px</span>
@@ -64,13 +71,7 @@
 </template>
 
 <script setup lang="ts">
-import {
-  onMounted,
-  ref,
-  onBeforeUnmount,
-  nextTick,
-  watch,
-} from "vue";
+import { onMounted, ref, onBeforeUnmount, nextTick, watch } from "vue";
 import type { Ref } from "vue";
 import { EyeFilled, EyeInvisibleFilled } from "@ant-design/icons-vue";
 import { UseDraggable } from "@vueuse/components";
@@ -129,14 +130,17 @@ const virtualReferLine: Ref<ReferLine> = ref({
   type: null,
 });
 /* 临时参考线位置 */
-const handleMouseMoveHScaleplate = (e: MouseEvent, type: "horizontal" | "vertical") => {
+const handleMouseMoveHScaleplate = (
+  e: MouseEvent,
+  type: "horizontal" | "vertical"
+) => {
   const { offsetX, offsetY } = e;
   const { scale, originX, originY, scrollX, scrollY } = stageStore;
 
   virtualReferLine.value.x = type === "horizontal" ? offsetX + 20 : 0;
   virtualReferLine.value.y = type === "vertical" ? offsetY + 20 : 0;
   // 计算当前位置数值
-  if(type === "horizontal") {
+  if (type === "horizontal") {
     const offset = scrollX - originX;
     virtualReferLine.value.value = Math.round((offset + offsetX) / scale);
   } else {
@@ -146,7 +150,7 @@ const handleMouseMoveHScaleplate = (e: MouseEvent, type: "horizontal" | "vertica
 };
 /* 添加参考线 */
 const handleAddReferLine = () => {
-  if(!virtualReferLine.value.type) return;
+  if (!virtualReferLine.value.type) return;
 
   projectStore.addReferLine({
     ...virtualReferLine.value,
@@ -154,14 +158,18 @@ const handleAddReferLine = () => {
   });
 };
 /* 拖拽参考线 */
-const handleDragReferLine = ({x, y}: {x: number, y: number}, e: PointerEvent, key: number) => {
+const handleDragReferLine = (
+  { x, y }: { x: number; y: number },
+  e: PointerEvent,
+  key: number
+) => {
   const referLine = projectStore.referLines.find((item) => item.key === key);
-  if(!referLine) return;
+  if (!referLine) return;
 
   const { scale, originX, originY, scrollX, scrollY } = stageStore;
-  const {left, top} = horizontalRef.value!.getBoundingClientRect();
+  const { left, top } = horizontalRef.value!.getBoundingClientRect();
 
-  if(referLine.type === "horizontal") {
+  if (referLine.type === "horizontal") {
     const lineX = x - left + 20;
     const offsetX = scrollX - originX;
 
@@ -179,7 +187,6 @@ const handleDragReferLine = ({x, y}: {x: number, y: number}, e: PointerEvent, ke
 };
 /* ===============================参考线结束================================= */
 
-
 /* 设置刻度宽高 */
 const setWindowSize = async () => {
   windowSize.value = {
@@ -191,19 +198,32 @@ const setWindowSize = async () => {
 };
 
 watch(
-  () => [stageStore.scrollX, stageStore.scrollY, stageStore.scale],
+  () => [
+    stageStore.scrollX,
+    stageStore.scrollY,
+    stageStore.scale,
+    stageStore.viewportHeight,
+    stageStore.viewportWidth,
+  ],
   () => {
     handleDrawScaleplate();
   },
   { immediate: false }
 );
 
+let observer: ResizeObserver;
 onMounted(() => {
   setWindowSize();
-  addEventListener("resize", setWindowSize);
+
+  observer = new ResizeObserver(setWindowSize);
+  /* 监听画布尺寸变化 */
+  const element = document.getElementsByClassName('workspace-wrapper')?.[0];
+  if(element) {
+    observer.observe(element);
+  }
 });
 onBeforeUnmount(() => {
-  removeEventListener("resize", setWindowSize);
+  observer.disconnect();
 });
 </script>