开始也是用vue自定义指令来实现,后来发现一个页面中有两个el-dialog时,只有一个起作用,求指点。。。

所以写了一个全局的方法来调用。

 
~/utils/dialogDrag.js

1
export default { 2 dialogDrag(el) { 3 let dragDom = el.querySelector('.el-dialog'); 4 let dragDomHeader = el.querySelector('.el-dialog__header'); 5 dragDomHeader.style.cursor = 'move'; 6 dragDomHeader._isDrag = false; 7 // 鼠标按下事件 8 // onmousedown事件绑定之所以在el-dialog__header上,是因为绑定在el-dialog时弹框中的表单会无法编辑 9 dragDomHeader.onmousedown = (e) => { 10 dragDomHeader._isDrag = true; 11 // 鼠标相对元素的位置 12 dragDomHeader._startX = e.clientX - dragDomHeader.offsetLeft; 13 dragDomHeader._startY = e.clientY - dragDomHeader.offsetTop; 14 e.preventDefault(); 15 }; 16 document.onmousemove = (e) => { 17 if (dragDomHeader._isDrag) { 18 // 鼠标的位置减去鼠标相对元素的位置得到元素的位置 19 let _endX = e.clientX - dragDomHeader._startX; 20 let _endY = e.clientY - dragDomHeader._startY; 21 dragDom.style.left = _endX + 'px'; 22 dragDom.style.top = _endY + 'px'; 23 } 24 }; 25 document.onmouseup = () => { 26 dragDomHeader._isDrag = false; 27 }; 28 } 29 };

 

 

 index.vue

1
<template> 2 <el-dialog @open="openDialog" ref="dialog"> 3 </el-dialog> 4 </template> 5 6 <script> 7 import DialogDrag from '~/utils/dialogDrag'; 8 9 methods: { 10 openDialog() { 11 DialogDrag.dialogDrag(this.$refs.dialog.$el); 12 } 13 } 14 </script>

 

posted on 2020-04-17 11:36  zoey-blog  阅读(1245)  评论(2编辑  收藏  举报