diff --git a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue index 24a4f9a5..b7c24f12 100644 --- a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue @@ -314,7 +314,7 @@ // 鼠标事件 props.canvas.on("selection:created", getActiveObject); props.canvas.on("selection:updated", getActiveObject); - // props.canvas.on("selection:cleared", () => console.log("selection:cleared")); + props.canvas.on("selection:cleared", close); props.canvas.on("object:rotating", objectRotatingChange); } @@ -327,7 +327,7 @@ // 移除鼠标事件 props.canvas.off("selection:created", getActiveObject); props.canvas.off("selection:updated", getActiveObject); - // props.canvas.off("selection:cleared"); + props.canvas.off("selection:cleared", close); props.canvas.off("object:rotating", objectRotatingChange); } diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index 31c01762..bedc9cbb 100644 --- a/src/component/Canvas/CanvasEditor/index.vue +++ b/src/component/Canvas/CanvasEditor/index.vue @@ -127,6 +127,7 @@ const canvasRef = ref(null); const canvasContainerRef = shallowRef(null); const imageUploadRef = ref(null); const currentZoom = ref(100); +const appContainerRef = ref(null); // 画布设置 const canvasWidth = ref(props.config.width); @@ -914,6 +915,32 @@ const cropImage = (url) => { }; provide("cropImage", cropImage); // 提供给子组件使用 +// 处理画布容器的拖放事件 +const isDragOver = ref(false); +const canvasDragover = (e) => { + e.preventDefault(); + const types = e.dataTransfer.types; + isDragOver.value = types.includes("Files"); +}; + +// 处理画布容器的拖离事件 +const canvasDragleave = (e) => { + e.preventDefault(); + isDragOver.value = false; +}; + +// 处理画布容器的拖放事件 +const canvasDragdrop = (e) => { + e.preventDefault(); + isDragOver.value = false; + const files = e.dataTransfer.files; + for (const file of files) { + if (file.type.startsWith("image/")) { + handleImageUpload({ target: { files: [file] } }); + } + } +}; + // 提供外部ref实例方法 defineExpose({ layers, // 图层数据 @@ -1104,7 +1131,13 @@ defineExpose({ @@ -1325,6 +1360,21 @@ defineExpose({ border-bottom: 1px solid #e0e0e0; background-color: #ffffff; } + >.dragover-tip{ + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 1.6rem; + z-index: 9999; + pointer-events: none; + } } .main-content {