解决vuedraggable与页面样式zoom冲突的问题
vuedraggable毫无疑问很好用,在搭建项目的时候,临时接到一个需求,画布中的元素需要进行缩放
然后问题就来了,在缩小到0.6左右的时候,vuedraggable的拖放失灵了
分析后发现是当画布 使用了zoom:0.6这样的样式,导致了鼠标的坐标出现了偏差
另外在实际操作中发现transform:scale(0.6);这样是没有问题的.但是会有一个问题,元素经过transform后,占位还是跟没有缩放那么大.
那么折中一下.在画布外面包一层元素”drag-wrap”,在画布transform后,同步计算并且赋值drag-wrap的宽高,并且加个overflow:hidden.解决问题
核心代码:
<template>
<div :style="dragWrapStyle">
<Draggable
:style="dragStyle"
></Draggable>
</div>
</template>
<script setup>
let dragWrapStyle = ref(null);
const dragStyle = computed(()=>{
//这里是我获取画布的宽高与缩放属性,根据实际情况自己修改
const {width, height, zoom} = canvas.value;
// 一些逻辑代码,获取缩放大小,方法getZoomValue自己写
const zoomValue = getZoomValue();
dragWrapStyle.value= {
width: (width * zoomValue) + 'px',
height: (height * zoomValue) + 'px'
}
return{
width: `${width}px`,
height: `${height}px`,
transform: "scale(" + zoomValue + ")",
transformOrigin: "left top",
}
})
</script>
