利用vue自定义指令directive实现拖动elementUI的dialog

<template><el-dialog :visible.sync="testDialog" title="测试弹框拖拽" v-dialogDrag="{ x: transformX, y: transformY }" :close-on-click-modal="false" :append-to-body="true" :modal-append-to-body="true"></el-dialog>
</template>
<script>
import Vue from 'vue'Vue.directive('dialogDrag', {bind(el, binding, /*vnode, oldVnode*/) {// 获取拖拽内容头部const dialogHeaderEl = el.querySelector('.el-dialog__header');const dragDom = el.querySelector('.el-dialog');dragDom.style.transform="translate("+binding.value.x+"px,"+binding.value.y+"px)";dialogHeaderEl.style.cursor = 'move';// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);// 鼠标按下事件dialogHeaderEl.onmousedown = (e) => {// 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)const disX = e.clientX - dialogHeaderEl.offsetLeft;const disY = e.clientY - dialogHeaderEl.offsetTop;// 获取到的值带px 正则匹配替换let styL, styT;// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为pxif (sty.left.includes('%')) {styL = +document.body.clientWidth * (+sty.left.replace(/%/g, '') / 100)+binding.value.x;styT = +document.body.clientHeight * (+sty.top.replace(/%/g, '') / 100)+binding.value.y;} else {styL = +sty.left.replace(/px/g, '')+binding.value.x;styT = +sty.top.replace(/px/g, '')+binding.value.y;}// 鼠标拖拽事件document.onmousemove = function (e) {// 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)const l = e.clientX - disX;const t = e.clientY - disY;let finallyL = l + styL;let finallyT = t + styT;// 边界值判定 注意clientWidth scrollWidth区别 要减去之前的top left值if (finallyL < 0) {// 顶部finallyL = 0} else if (finallyL > dragDom.offsetParent.clientWidth - dragDom.clientWidth) {///底部finallyL = dragDom.offsetParent.clientWidth - dragDom.clientWidth}if (finallyT < 0) {// 顶部finallyT = 0} else if (finallyT > dragDom.offsetParent.clientHeight - dragDom.clientHeight) (///底部finallyT = dragDom.offsetParent.clientHeight - dragDom.clientHeight)binding.value.x=finallyL;binding.value.y=finallyT;dragDom.style.transform="translate("+finallyL+"px,"+finallyT+"px)";//将此时的位置传出去//binding.value({x:e.pageX,y:e.pageY})};document.onmouseup = function () {document.onmousemove = null;document.onmouseup = null;};}}
})
export default {name: "dragModal",data(){return{testDialog:true,transformX:100,transformY:200}},methods:{open:function () {this.testDialog=true}}
}
</script>
<style>
.el-dialog{margin: 0 !important;/*transform: translate(366px, 140px);*/
}
</style>

配置在整个系统,通用。

实现提示框可拖拽(针对antd vue中的a-modal提示框)_sparrow_girl的博客-CSDN博客在 utils 中新建 directives.js 文件import Vue from 'vue'// v-drag-modal: 弹窗拖拽Vue.directive('drag-modal', (el, bindings, vnode) => { Vue.nextTick(() => { let { visible, destroyOnClose } = vnode.componentInstance // 防止未定义 destroyOnClose 关闭弹窗时dohttps://blog.csdn.net/qq_51053759/article/details/122430558

shelleyhlx/vue-example - Gitee.comhttps://gitee.com/shelleyhlx/vue-example/tree/master/directive/drag-elementui

modal 可拖拽 elementui antd相关推荐

  1. antd vue的modal可拖拽指令,包括表头拖拽和表体拖拽

    项目需要使用antd-vue的modal可以拖拽,然后在网上搜了一下方法, 有一个老哥写了个方法 链接在这: https://blog.csdn.net/baidu_20264113/article/ ...

  2. Antd Modal 可拖拽移动

    目标: 实现antd Modal 弹窗或者其他弹窗的点击标题进行拖拽的效果 一 .内容: 1.使用antd Modal 组件,要想改变位置需要改变Modal style 的left 和top属性,其默 ...

  3. bootstrap拖动div_BootStrap modal实现拖拽功能

    bootstrap中有javascript插件modal也就是对话框,加入拖拽功能,具体内容如下 在使用modal时首选需要引用js // 完成拖拽功能 // 完成Modal 编辑Html代码 Boo ...

  4. vue如何拖拽element-ui的table

    最近遇到一个需求,组长想给table添加一个拖拽功能,可以让操作者快速的排序而不是一条数据一条数据的修改,由于element ui官方并没有提供table的 拖拽功能,为了响应号召,不重复造轮子,这里 ...

  5. Vue3 + Ant Design Vue Modal 对话框可拖拽指令

    1.html部分 <div v-dialogDrag id="modalBox"><a-modalv-model:visible="visible&qu ...

  6. antd 日期选择框如何提交_基于Ant Design的Modal组件来实现一个可拖拽的React模态框...

    引言 写这篇文章的原因是因为在项目中用到了Antd Design的React组件,当有业务需求需要用到模态框的时候遇到了一些小问题,Antd的模态框Modal组件时不能拖拽的,一般情况下不可拖拽也没什 ...

  7. antd modal 拖动_antd的Modal可移动(可拖拽)

    通过第三方插件实现 使用方法: npm install dragm -S 2.安装后运行如果出现缺少.less,则在命令行>yarn install(或直接运行 yarn),然后再运行 3.新建 ...

  8. elementUi el-dialog 对话框实现可拖拽、去掉覆盖层、并可操作底层的按钮

    一.对话框实现可拖拽功能 实现方法:vue的指令 使用方法: 1.将下列drag.js文件放入代码库中: 2.在main.js中引入上述drag.js文件: import 'src/libs/drag ...

  9. 使用react-draggable和react-resizable实现Ant Design Modal的拖动和拖拽改变宽度

    文章目录 使用react-draggable和react-resizable实现Ant Design Modal的拖动和拖拽改变宽度 需求 实现 参考代码 参考 使用react-draggable和r ...

  10. antd vue3 图片上传组件扩展,支持多图上传 图片拖拽排序等

    组件涉及到 vue3.2.vite.Ant Design Vue 3.2.16.Windi CSS样式库.vuedraggable-es拖拽库等 组件功能 图片拖拽 多图上传 自定义图片加载样式 自定 ...

最新文章

  1. ModelBasedCompressiveSensing
  2. Javascript高级程序设计——基本类型和引用类型的值
  3. [Swift]LeetCode927. 三等分 | Three Equal Parts
  4. 定位导致物化视图无法快速刷新的原因
  5. Android音频处理 PCM格式
  6. 【Redis】Redis Jedis实现发布订阅功能
  7. python 基本数据类型
  8. laravel将数据库对象转为数组的方法
  9. python 随机选择字符串中的一个字符
  10. pcb天线和纯铜天线_各种PCB板载天线以及PCB设计的要点是什么
  11. B2B、B2C、C2C、O2O分别是什么意思?
  12. 联手华为,北京联通在北京打造不一样的5G慧生活!
  13. go import导入包详解
  14. 虚拟服务器修改教程,【新挑战】十二职业虚拟机一键端图文架设修改教程
  15. 上传本地网页到github网址完整详细步骤
  16. 玩拍七不再怕,判断7的倍数有妙招
  17. 从0开始学大数据-数据仓库建模
  18. R中的特殊值NAN\NA\inf\NULL
  19. 虚拟化堆叠技术-典型配置H3C IRF
  20. 网络时间同步设备(时钟同步产品)时钟系统应用技术介绍

热门文章

  1. Basic4IOS B4I开发原生iOS,Visual Studio中编程
  2. intel h61 linux驱动下载,intel h61主板驱动
  3. GifUtil给gif图片添加文字、图片水印
  4. JMeter之接口测试脚本编写
  5. oracle临时表空间释放
  6. 论文相关-论文写作-图片色卡
  7. 涉密专用计算机平台,涉密计算机及移动存储介质保密管理系统(三合一)
  8. 使用rpm 安装wget
  9. 创建简单vue项目 / Webpack创建vue项目
  10. Hello Qt(十三)——QT信号与槽机制