|
@@ -1,43 +1,46 @@
|
|
|
//拖动对话框
|
|
|
export default {
|
|
|
bind(el, binding, vnode) {
|
|
|
- const dialogEl = el.querySelector('.el-dialog');
|
|
|
- const headerEl = el.querySelector('.el-dialog__header');
|
|
|
+ const dialogEl = el.querySelector('.el-dialog')
|
|
|
+ const headerEl = el.querySelector('.el-dialog__header')
|
|
|
|
|
|
- let dragging = false;
|
|
|
- let dragStart = { x: 0, y: 0 };
|
|
|
- let dialogStart = { top: 0, left: 0 };
|
|
|
+ let dragging = false
|
|
|
+ let dragStart = { x: 0, y: 0 }
|
|
|
+ let dialogStart = { top: 0, left: 0 }
|
|
|
|
|
|
+ //向对话框注册鼠标按下事件
|
|
|
headerEl.addEventListener('mousedown', (event) => {
|
|
|
- dragging = true;
|
|
|
- dragStart.x = event.clientX;
|
|
|
- dragStart.y = event.clientY;
|
|
|
- const rect = dialogEl.getBoundingClientRect();
|
|
|
- dialogStart.top = rect.top + window.scrollY;
|
|
|
- dialogStart.left = rect.left + window.scrollX;
|
|
|
- document.body.style.userSelect = 'none'; // 禁止文本选择
|
|
|
- });
|
|
|
+ if (event.button === 0) {//按下的是左键
|
|
|
+ dragging = true;
|
|
|
+ dragStart.x = event.clientX
|
|
|
+ dragStart.y = event.clientY
|
|
|
+ const rect = dialogEl.getBoundingClientRect()
|
|
|
+ dialogStart.top = rect.top + window.scrollY
|
|
|
+ dialogStart.left = rect.left + window.scrollX
|
|
|
+ document.body.style.userSelect = 'none'; // 禁止文本选择
|
|
|
+ }
|
|
|
+ })
|
|
|
|
|
|
document.addEventListener('mousemove', (event) => {
|
|
|
if (dragging) {
|
|
|
- const deltaX = event.clientX - dragStart.x - 390;
|
|
|
- const deltaY = event.clientY - dragStart.y - 110;
|
|
|
- dialogEl.style.top = `${dialogStart.top + deltaY}px`;
|
|
|
- dialogEl.style.left = `${dialogStart.left + deltaX}px`;
|
|
|
+ const deltaX = event.clientX - dragStart.x - 400
|
|
|
+ const deltaY = event.clientY - dragStart.y - 110
|
|
|
+ dialogEl.style.top = `${dialogStart.top + deltaY}px`
|
|
|
+ dialogEl.style.left = `${dialogStart.left + deltaX}px`
|
|
|
}
|
|
|
- });
|
|
|
+ })
|
|
|
|
|
|
document.addEventListener('mouseup', () => {
|
|
|
- dragging = false;
|
|
|
- document.body.style.userSelect = ''; // 恢复文本选择
|
|
|
- });
|
|
|
+ dragging = false
|
|
|
+ document.body.style.userSelect = '' // 恢复文本选择
|
|
|
+ })
|
|
|
|
|
|
// 在组件销毁时移除事件监听器
|
|
|
el._removeDragListeners = () => {
|
|
|
- headerEl.removeEventListener('mousedown', startDrag);
|
|
|
- document.removeEventListener('mousemove', onDrag);
|
|
|
- document.removeEventListener('mouseup', stopDrag);
|
|
|
- };
|
|
|
+ headerEl.removeEventListener('mousedown', startDrag)
|
|
|
+ document.removeEventListener('mousemove', onDrag)
|
|
|
+ document.removeEventListener('mouseup', stopDrag)
|
|
|
+ }
|
|
|
|
|
|
// 使用 Vue 的 onBeforeUnmount 钩子(或在 Vue 2 中使用 destroyed 钩子)来移除监听器
|
|
|
//vnode.context.$once('hook:beforeUnmount', el._removeDragListeners);
|