【Vue2.X】基于ElementUI实现dialog弹窗移动效果-⾃定义指令
好吃的家常菜做法
系列(⼆)
幼儿园卡通图片
v-dialogDrag: 弹窗拖拽
使⽤: <el-dialog XXX v-dialogDrag></el-dialog>
1
2 Vue.directive('dialogDrag', {
3 bind(el, binding, vnode, oldVnode) {买帽子
4 const dialogHeaderEl = el.querySelector('.el-dialog__header')
5 const dragDom = el.querySelector('.el-dialog')
6 dialogHeaderEl.style.cursor = 'move'
7
8// 获取原有属性 ie dom元素.currentStyle ⽕狐⾕歌 ComputedStyle(dom元素, null);
9 const sty = dragDom.currentStyle || ComputedStyle(dragDom, null)
崔雅涵图片
10
驾考科目一
11 udown = (e) => {
12// ⿏标按下,计算当前元素距离可视区的距离
13 const disX = e.clientX - dialogHeaderEl.offtLeft
14 const disY = e.clientY - dialogHeaderEl.offtTop
15
16// 获取到的值带px 正则匹配替换
17 let styL, styT
18
网卡接口类型
19// 注意在ie中第⼀次获取到的值为组件⾃带50% 移动之后赋值为px
20if (sty.left.includes('%')) {
21 styL = +document.body.clientWidth * (+place(/\%/g, '') / 100)
22 styT = +document.body.clientHeight * (+place(/\%/g, '') / 100)
23 } el {
24 styL = +place(/\px/g, '')
25 styT = +place(/\px/g, '')度德而师之意思
26 }
27
28 umove = function(e) {
29// 通过事件委托,计算移动的距离
30 const l = e.clientX - disX
31 const t = e.clientY - disY
32
33// 移动当前元素
34 dragDom.style.left = `${l + styL}px`
35 p = `${t + styT}px`
36
37// 将此时的位置传出去
38// binding.value({x:e.pageX,y:e.pageY})
39 }
40
41 uup = function(e) {
42 umove = null
43 uup = null
44 }
45 }
居安思危作文46 }
47 })
48
声明:此⾃定义指令照搬的⽹络上的⽂章,但由于时间久远、已不记得⽂章地址,若有侵犯、请留⾔告知⽂章地址,看见后会及时挂上⽂章转载地址。谢谢!