解决vuedraggable与页面样式zoom冲突的问题

作者: TAIS3 分类: css奇技怪巧,JavaScript,VUE 发布时间: 2024-07-17 16:11

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>

 

发表回复