wms-antdvue/.svn/pristine/7d/7d69a552dca2bd6ebbe8c9433f6e8b0f765442f6.svn-base
2024-11-07 16:33:03 +08:00

47 lines
1.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { ObjectDirective } from 'vue';
import { nextTick } from 'vue';
export const dragModal: ObjectDirective = {
mounted(el, bindings, vnode) {
nextTick(() => {
const { visible, destroyOnClose } = vnode.componentInstance;
// 防止未定义 destroyOnClose 关闭弹窗时dom未被销毁指令被重复调用
if (!visible) return;
const modal = el.getElementsByClassName('ant-modal')[0];
const header = el.getElementsByClassName('ant-modal-header')[0];
let left = 0;
let top = 0;
// 未定义 destroyOnClose 时dom未被销毁关闭弹窗再次打开弹窗会停留在上一次拖动的位置
if (!destroyOnClose) {
left = modal.left || 0;
top = modal.top || 0;
}
// top 初始值为 offsetTop
top = top || modal.offsetTop;
// 点击title部分拖动
header.onmousedown = (e) => {
const startX = e.clientX;
const startY = e.clientY;
header.left = header.offsetLeft;
header.top = header.offsetTop;
el.onmousemove = (event) => {
const endX = event.clientX;
const endY = event.clientY;
modal.left = header.left + (endX - startX) + left;
modal.top = header.top + (endY - startY) + top;
modal.style.left = modal.left + 'px';
modal.style.top = modal.top + 'px';
};
el.onmouseup = (event) => {
left = modal.left;
top = modal.top;
el.onmousemove = null;
el.onmouseup = null;
header.releaseCapture && header.releaseCapture();
};
header.setCapture && header.setCapture();
};
});
},
};