本文将详细介绍如何通过自定义指令,为elementui的el-message-box组件添加拖拽功能,解决产品需求中所有错误消息弹窗可拖拽的问题。现有代码中,错误消息弹窗通过this.$showalert.showerrormsg(errmsg)方法弹出。
一、创建自定义指令
在项目src目录下创建directive/el-drag-dialog文件夹,包含drag.js和index.js两个文件,分别封装指令逻辑和注册指令。
二、编写指令代码
export default { bind(el, binding, vnode) { const dialogHeader = el.querySelector('.el-dialog__header'); const dialog = el.querySelector('.el-dialog'); dialogHeader.style.cursor = 'move'; dialog.style.top = '0px'; const getStyle = (function() { if (window.document.currentStyle) { return (dom, attr) => dom.currentStyle[attr]; } else { return (dom, attr) => window.getComputedStyle(dom, null)[attr]; } })(); dialogHeader.onmousedown = (e) => { const disX = e.clientX - dialogHeader.offsetLeft; const disY = e.clientY - dialogHeader.offsetTop; const dragWidth = dialog.offsetWidth; const dragHeight = dialog.offsetHeight; const screenWidth = document.body.clientWidth; const screenHeight = document.body.clientHeight; let minLeft = 0; let maxLeft = screenWidth - dragWidth; let minTop = 0; let maxTop = screenHeight - dragHeight; let originalLeft = parseInt(getStyle(dialog, 'left'), 10) || 0; let originalTop = parseInt(getStyle(dialog, 'top'), 10) || 0; document.onmousemove = (e) => { let left = e.clientX - disX + originalLeft; let top = e.clientY - disY + originalTop; left = Math.max(minLeft, Math.min(left, maxLeft)); top = Math.max(minTop, Math.min(top, maxTop)); dialog.style.left = `${left}px`; dialog.style.top = `${top}px`; vnode.child.$emit('dragDialog'); // 触发自定义事件 }; document.onmouseup = () => { document.onmousemove = null; document.onmouseup = null; }; }; }, };
import drag from './drag'; const install = (Vue) => { Vue.directive('el-drag-dialog', drag); }; if (typeof window !== 'undefined' && window.Vue) { window.elDragDialog = drag; window.Vue.use(install); } drag.install = install; export default drag;
三、在组件中使用指令
import elDragDialog from '@/directive/el-drag-dialog';
<el-dialog :visible.sync="dialogVisible" title="错误信息" v-el-drag-dialog> <!-- 弹窗内容 --> </el-dialog>
<el-dialog :visible.sync="dialogVisible" title="错误信息" v-el-drag-dialog @dragDialog="onDragEnd"> <!-- 弹窗内容 --> </el-dialog> methods: { onDragEnd() { console.log('Dialog drag ended'); // 在这里添加拖拽结束后的操作 } }
通过以上步骤,即可实现ElementUI消息框的拖拽功能。 请根据你的项目实际路径调整导入路径。 代码已优化,处理了边界情况和初始位置,并添加了自定义事件dragDialog方便后续扩展。
以上就是如何通过自定义指令实现ElementUI消息框的拖拽功能?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号