面向百度编程的小白最近遇到一个el-dialog实现拖拽移动的需求。翻了翻饿了么官网发现el-dialog并没有关于这一块的属性方法。所以与大家分享一下有关的方法。

  1. 首先新建一个js文件

//directive.js文件,用于详情对话框可移动import Vue from 'vue'// v-dialogDrag: 弹窗拖拽
Vue.directive('dialogDrag', {bind(el, binding, vnode, oldVnode) {const dialogHeaderEl = el.querySelector('.el-dialog__header')const dragDom = el.querySelector('.el-dialog')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.offsetLeftconst disY = e.clientY - dialogHeaderEl.offsetTop// 获取到的值带px 正则匹配替换let styL, styT// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为pxif (sty.left.includes('%')) {styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)} else {styL = +sty.left.replace(/\px/g, '')styT = +sty.top.replace(/\px/g, '')}document.onmousemove = function(e) {// 通过事件委托,计算移动的距离const l = e.clientX - disXconst t = e.clientY - disY// 移动当前元素dragDom.style.left = `${l + styL}px`dragDom.style.top = `${t + styT}px`// 将此时的位置传出去// binding.value({x:e.pageX,y:e.pageY})}document.onmouseup = function(e) {document.onmousemove = nulldocument.onmouseup = null}}}
})// v-dialogDragWidth: 弹窗宽度拖大 拖小
Vue.directive('dialogDragWidth', {bind(el, binding, vnode, oldVnode) {const dragDom = binding.value.$el.querySelector('.el-dialog')el.onmousedown = (e) => {// 鼠标按下,计算当前元素距离可视区的距离const disX = e.clientX - el.offsetLeftdocument.onmousemove = function(e) {e.preventDefault() // 移动时禁用默认事件// 通过事件委托,计算移动的距离const l = e.clientX - disXdragDom.style.width = `${l}px`}document.onmouseup = function(e) {document.onmousemove = nulldocument.onmouseup = null}}}
})
  1. 需要在main.js中引用

import './utils/directive';
  1. 在el-dialog组件中使用

<el-dialogwidth="1378px"top="35vh"v-dialog-drag>......
</el-dialog>

el-dialog组件实现可以拖拽移动功能相关推荐

  1. element-ui dialog组件添加可拖拽位置 可拖拽宽高

    有几个点需要注意一下 每个弹窗都要有唯一dom可操作 指令可以做到 拖拽时要添加可拖拽区块 header 由于element-ui dialog组件在设计时宽度用了百分比, 这里不同浏览器有兼容性问题 ...

  2. dialog弹框通过自定义指令实现可拖拽位移功能

    给dialog弹框加上自定义指令,实现可拖拽功能 1.在utils文件夹内新建directives.js文件,代码如下 import Vue from 'vue'// v-dialogDrag: 弹窗 ...

  3. react-5 高阶函数 (HOC)(防抖节流) --- 高阶组件(HOF)(拖拽)

    高阶函数hoc:高阶函数是对其他函数进行操作的函数 高阶组件hof:高阶组件即接受一个或多个组件作为参数并且返回一个组件,本质也就是一个函数,并不是一个组件 .把通用的逻辑放在高阶组件中,对组件实现一 ...

  4. vue 左树右表增加左右拖拽的功能

    左树右表 是后台很常见的功能,当左树内容过长,可能就要考虑到拖拽的功能了 这里简单说一下我的实现思路, <div class='left-tree'> <div>......这 ...

  5. sortable vue 排序_vue 使用 sortable 实现 el-table 拖拽排序功能

    本文给大家介绍vue 使用 sortable 实现 el-table 拖拽排序功能,具体内容如下所示: npm 下载: npm install sortablejs --save 引入: import ...

  6. MFC中窗口实现拖拽文件功能

    MFC窗口拖拽文件功能指的是用鼠标将文件拖拽入窗口后,在窗口中可以获取拖拽文件的绝对路径,如图1所示. 图1 文件拖拽功能 实现窗口的拖拽文件功能,首先要将窗口注册为放置拖拽文件的目标,之后在窗口中响 ...

  7. vue使用高德地图搜索地址添加标记marker,定位,拖拽选址功能

    目录 JSAPI 的加载 使用 JSAPI Loader (推荐) 实现效果: 需求:点击输入框弹窗地图弹窗,输入框输入地址模糊搜索列表结果,点击列表添加相应得marker标记,并且添加标记拖拽选址功 ...

  8. vue上传图片组件(支持拖拽文件夹上传)

    点击打开源码 https://github.com/317482454/vue_upload 在线查看地址:http://jqvue.com/demo/vue_upload/demo.html 1.获 ...

  9. unity图片拖不进去_Unity UGUI实现简单拖拽图片功能

    这一篇博客我们来使用 UGUI 实现图片的拖拽功能. 说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui ...

最新文章

  1. python 删除list 里面的一个空集合
  2. Jmeter学习笔记三_操作数据库(MySQL)
  3. 为什么 wait/notify/notifyAll 在 Object 类定义而不是 Thread 类?
  4. uat环境是什么环境_环境污染会对环境造成怎样的损害?污水处理活性炭能起到什么效果呢?...
  5. 人工智能对教育产业的冲击和机遇分析 ——游戏化学习
  6. 2012自学CCNP路由与交换之四交换机初始化
  7. uvm 形式验证_验证平台自动化篇之二:UVM Framework
  8. logstash 获取多个kafka_logstash 配置详解
  9. FreeSql (二)自动迁移实体
  10. 语音识别市场竞争激烈,亚马逊崛起与微软衰落形成反差
  11. MathType:在公式中插入空格
  12. 亚马逊选品调研之全球品牌和专利注册查询方法
  13. paypal android 教程,android端集成paypal
  14. 利用redis,模拟控制库存消耗场景
  15. Unity实现隐藏鼠标功能
  16. Unity实现Angry Bird弹弓发射功能
  17. jekyll部署到服务器
  18. 未来交通已经“上线” 高德地图智慧交通合作已攻150城,半年大增约五成
  19. FATE学习:五种不同的API提交FATE任务
  20. java将汉字转成拼音首字母大写字母_java实现将汉字转为首字母、拼音

热门文章

  1. 从0到100全流程构建「数据指标体系」
  2. Tushare简单的数据使用以及mysql存储教程
  3. python - 求商和余数“/“ “//“ “%“运算符的区别
  4. JS键盘码及使用方法
  5. Gson转换错误导致Int变为Double类型
  6. JSP九大内置对象:
  7. C语言——数组练习题
  8. AsyncTask 复用
  9. python总结(数据类型、逻辑控制、函数、类与对象、推导式、解包、类型转换、异常、上下文、jsonpath、定时器)
  10. CAS 实现的单点登录