elementui拖拽对话框_Element UI Dialog实现位置可拖拽(自定义指令方法)

本文介绍如何通过自定义指令在Element UI中实现Dialog对话框的拖拽功能,以便在不关闭对话框的情况下调整其位置,看到下方内容。提供了一段`drag-dialog.js`的代码实现,并说明了在组件上应用该指令的方法。
摘要由CSDN通过智能技术生成

前言

由于Dialog面积很大,覆盖了视口大部分面积,而有时确实需要让Dialog可拖拽,以便在不关闭的前提下,能看到下方的内容。这里我提供一个自定义指令,实现这个要求。

src/directive/drag-dialog/index.js

import dragDialog from './drag-dialog'

const install = function (Vue) {

Vue.directive('drag-dialog', dragDialog)

}

if (window.Vue) {

window.dragDialog = dragDialog

Vue.use(install); // eslint-disable-line

}

dragDialog.install = install

export default dragDialog

src/directive/drag-dialog/drag-dialog.js

export default {

bind(el) {

el.getElementsByClassName('el-dialog__header')[0].style.cursor = 'move';

el.getElementsByClassName('el-dialog__header')[0].addEventListener('mousedown', function(e) {

const elDialog = el.getElementsByClassName('el-dialog')[0];

const initClientX = e.clientX;

const initClientY = e.clientY;

const initStyleLeft = elDialog.style.left ? elDialog.style.left.replace('px','') - 0 : 0;

const initStyleTop = elDialog.style.top ? elDialog.style.top.replace('px','') - 0 : 0;

document.onmousemove = function(e){

const moveX = e.clientX - initClientX + initStyleLeft;

const moveY = e.clientY - initClientY + initStyleTop;

elDialog.style.left = moveX + "px";

elDialog.style.top = moveY + "px";

}

document.onmouseup = function(e){

document.onmousemove = null;

document.onmouseup = null;

};

// 不加return false的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效

return false;

}, false)

},

update(el, binding, vnode, old) {

// 实现每次打开 Dialog 都复位到中央

setTimeout(() => {

if (el.style.display === 'none') {

el.getElementsByClassName('el-dialog')[0].style.top = '';

el.getElementsByClassName('el-dialog')[0].style.left = '';

}

}, 333); // Dialog 的关闭动画用时 300 毫秒,因此这里需要延迟执行,而且要多延迟一点点

},

}

使用

import这个index

加入自定义指令

给加上v-drag-dialog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值