feat: 🚀 父级拖拽框

This commit is contained in:
bunny 2024-05-10 14:04:56 +08:00
parent 8f22479002
commit 15278666c3
2 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,66 @@
import type { Directive } from 'vue';
interface ELType extends HTMLElement {
parentNode: any;
}
/*
1absoluterelative
2(onmousedown) left top
3(onmousemove) left top
4(onmouseup)
使 Dom v-draggable
<div class="dialog-model" v-draggable></div>
*/
const draggable: Directive = {
mounted(el: ELType) {
// 将光标设置为“move”将位置设置为“absolute”
el.style.cursor = 'move';
el.style.position = 'absolute';
// 当元素被点击时
el.onmousedown = function (e) {
// 计算鼠标点击位置与元素左上角之间的距离
let disX = e.pageX - el.offsetLeft;
let disY = e.pageY - el.offsetTop;
// 当鼠标移动时
document.onmousemove = function (e) {
// 计算元素的新位置
let x = e.pageX - disX;
let y = e.pageY - disY;
// 计算元素可以移动到的最大位置
let maxX = el.parentNode.offsetWidth - el.offsetWidth;
let maxY = el.parentNode.offsetHeight - el.offsetHeight;
// 确保元素不会超出其父元素的边界
if (x < 0) {
x = 0;
} else if (x > maxX) {
x = maxX;
}
if (y < 0) {
y = 0;
} else if (y > maxY) {
y = maxY;
}
// 设置元素的新位置
el.style.left = x + 'px';
el.style.top = y + 'px';
};
// 当鼠标释放时
document.onmouseup = function () {
// 停止跟踪鼠标移动
document.onmousemove = document.onmouseup = null;
};
};
},
};
export default draggable;

View File

@ -1,5 +1,15 @@
import type { Directive, DirectiveBinding } from 'vue';
/*
1使 canvas base64
2
使
<div v-waterMarker="{text:'版权所有',textColor:'rgba(180, 180, 180, 0.4)'}"></div>
*/
const addWaterMarker: Directive = (str: string, parentNode: any, font: any, textColor: string) => {
// 创建一个canvas元素
let can: HTMLCanvasElement = document.createElement('canvas');