modal 可拖拽 elementui antd
利用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相关推荐
- antd vue的modal可拖拽指令,包括表头拖拽和表体拖拽
项目需要使用antd-vue的modal可以拖拽,然后在网上搜了一下方法, 有一个老哥写了个方法 链接在这: https://blog.csdn.net/baidu_20264113/article/ ...
- Antd Modal 可拖拽移动
目标: 实现antd Modal 弹窗或者其他弹窗的点击标题进行拖拽的效果 一 .内容: 1.使用antd Modal 组件,要想改变位置需要改变Modal style 的left 和top属性,其默 ...
- bootstrap拖动div_BootStrap modal实现拖拽功能
bootstrap中有javascript插件modal也就是对话框,加入拖拽功能,具体内容如下 在使用modal时首选需要引用js // 完成拖拽功能 // 完成Modal 编辑Html代码 Boo ...
- vue如何拖拽element-ui的table
最近遇到一个需求,组长想给table添加一个拖拽功能,可以让操作者快速的排序而不是一条数据一条数据的修改,由于element ui官方并没有提供table的 拖拽功能,为了响应号召,不重复造轮子,这里 ...
- Vue3 + Ant Design Vue Modal 对话框可拖拽指令
1.html部分 <div v-dialogDrag id="modalBox"><a-modalv-model:visible="visible&qu ...
- antd 日期选择框如何提交_基于Ant Design的Modal组件来实现一个可拖拽的React模态框...
引言 写这篇文章的原因是因为在项目中用到了Antd Design的React组件,当有业务需求需要用到模态框的时候遇到了一些小问题,Antd的模态框Modal组件时不能拖拽的,一般情况下不可拖拽也没什 ...
- antd modal 拖动_antd的Modal可移动(可拖拽)
通过第三方插件实现 使用方法: npm install dragm -S 2.安装后运行如果出现缺少.less,则在命令行>yarn install(或直接运行 yarn),然后再运行 3.新建 ...
- elementUi el-dialog 对话框实现可拖拽、去掉覆盖层、并可操作底层的按钮
一.对话框实现可拖拽功能 实现方法:vue的指令 使用方法: 1.将下列drag.js文件放入代码库中: 2.在main.js中引入上述drag.js文件: import 'src/libs/drag ...
- 使用react-draggable和react-resizable实现Ant Design Modal的拖动和拖拽改变宽度
文章目录 使用react-draggable和react-resizable实现Ant Design Modal的拖动和拖拽改变宽度 需求 实现 参考代码 参考 使用react-draggable和r ...
- antd vue3 图片上传组件扩展,支持多图上传 图片拖拽排序等
组件涉及到 vue3.2.vite.Ant Design Vue 3.2.16.Windi CSS样式库.vuedraggable-es拖拽库等 组件功能 图片拖拽 多图上传 自定义图片加载样式 自定 ...
最新文章
- ModelBasedCompressiveSensing
- Javascript高级程序设计——基本类型和引用类型的值
- [Swift]LeetCode927. 三等分 | Three Equal Parts
- 定位导致物化视图无法快速刷新的原因
- Android音频处理 PCM格式
- 【Redis】Redis Jedis实现发布订阅功能
- python 基本数据类型
- laravel将数据库对象转为数组的方法
- python 随机选择字符串中的一个字符
- pcb天线和纯铜天线_各种PCB板载天线以及PCB设计的要点是什么
- B2B、B2C、C2C、O2O分别是什么意思?
- 联手华为,北京联通在北京打造不一样的5G慧生活!
- go import导入包详解
- 虚拟服务器修改教程,【新挑战】十二职业虚拟机一键端图文架设修改教程
- 上传本地网页到github网址完整详细步骤
- 玩拍七不再怕,判断7的倍数有妙招
- 从0开始学大数据-数据仓库建模
- R中的特殊值NAN\NA\inf\NULL
- 虚拟化堆叠技术-典型配置H3C IRF
- 网络时间同步设备(时钟同步产品)时钟系统应用技术介绍