import Vue from 'vue' // v-dialogpop-up: 弹窗拖拽 Vue.directive('dialogpop-up', { bind(el, binding, vnode, oldVnode) { const dialogHeaderEl = el.querySelector('.el-dialog__header')//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.offsetLeft const disY = e.clientY - dialogHeaderEl.offsetTop // 获å–到的值带px æ£åˆ™åŒ¹é…æ›¿æ¢ let styL, styT // 注æ„在ieä¸ ç¬¬ä¸€æ¬¡èŽ·å–到的值为组件自带50% 移动之åŽèµ‹å€¼ä¸ºpx if (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 - disX const 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 = null document.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.offsetLeft document.onmousemove = function(e) { e.preventDefault() // 移动时ç¦ç”¨é»˜è®¤äº‹ä»¶ // 通过事件委托,计算移动的è·ç¦» const l = e.clientX - disX dragDom.style.width = `${l}px` } document.onmouseup = function(e) { document.onmousemove = null document.onmouseup = null } } } })