亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

vue實現element-ui對話框可拖拽功能

2019-11-19 13:14:12
字體:
來源:轉載
供稿:網友

element-ui對話框可拖拽及邊界處理

應業務需求,需要實現對話框可拖拽問題,應element-ui沒有提供官方支持,于是便參考大神的文章,得出了適合業務需要的解決方案。很多大神給出的代碼是沒有解決邊界問題的,但是不解決邊界問題存在一個bug,拖到不可視區域后邊再也拖不回來了,不信你們可以試試。

在實現的功能的情況下,封裝成了js文件,然后再main.js中引入后可全局使用。

還是上代碼吧

功能實現代碼directives.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';    dialogHeaderEl.style.cssText += ';cursor:move;'    dragDom.style.cssText += ';top:0px;'     // 獲取原有屬性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);    const sty = (function() {        if (window.document.currentStyle) {            return (dom, attr) => dom.currentStyle[attr];        } else{            return (dom, attr) => getComputedStyle(dom, false)[attr];        }    })()            dialogHeaderEl.onmousedown = (e) => {      // 鼠標按下,計算當前元素距離可視區的距離      const disX = e.clientX - dialogHeaderEl.offsetLeft;      const disY = e.clientY - dialogHeaderEl.offsetTop;            const screenWidth = document.body.clientWidth; // body當前寬度        const screenHeight = document.documentElement.clientHeight; // 可見區域高度(應為body高度,可某些環境下無法獲取)                 const dragDomWidth = dragDom.offsetWidth; // 對話框寬度        const dragDomheight = dragDom.offsetHeight; // 對話框高度                const minDragDomLeft = dragDom.offsetLeft;        const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;                const minDragDomTop = dragDom.offsetTop;        const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;             // 獲取到的值帶px 正則匹配替換      let styL = sty(dragDom, 'left');      let styT = sty(dragDom, 'top');       // 注意在ie中 第一次獲取到的值為組件自帶50% 移動之后賦值為px      if(styL.includes('%')) {        styL = +document.body.clientWidth * (+styL.replace(//%/g, '') / 100);        styT = +document.body.clientHeight * (+styT.replace(//%/g, '') / 100);      }else {        styL = +styL.replace(//px/g, '');        styT = +styT.replace(//px/g, '');      };            document.onmousemove = function (e) {        // 通過事件委托,計算移動的距離                 let left = e.clientX - disX;                let top = e.clientY - disY;                                // 邊界處理                if (-(left) > minDragDomLeft) {                    left = -(minDragDomLeft);                } else if (left > maxDragDomLeft) {                    left = maxDragDomLeft;                }                                if (-(top) > minDragDomTop) {                    top = -(minDragDomTop);                } else if (top > maxDragDomTop) {                    top = maxDragDomTop;                }         // 移動當前元素                 dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;      };       document.onmouseup = function (e) {        document.onmousemove = null;        document.onmouseup = null;      };    }   }})

在邊界處理上,因為在我的項目中無法獲取到body的高度(被這個折磨了好久),所以采取了獲取可見區域高度,這里補充點知識

document.body.clientWidth //BODY對象寬度document.body.clientHeight //BODY對象高度document.documentElement.clientWidth //可見區域寬度document.documentElement.clientHeight //可見區域高度

在main.js中引入

// 引入Dialog可拖拽,注意文件所在目錄。目前尚未發現引入的先后關系,若有再補充import './directives.js';

ue文件中使用:

在el-dialog標簽中加入v-dialogDrag屬性

<el-dialog v-dialogDrag></el-dialog>

具體使用便是這樣,希望有人看到哈哈哈,當然主要還是想幫到大家。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97国产精品视频人人做人人爱| 亚洲国产又黄又爽女人高潮的| 91精品免费久久久久久久久| 中日韩美女免费视频网站在线观看| 黑人巨大精品欧美一区二区一视频| 精品国产1区2区| 98精品国产高清在线xxxx天堂| 欧美日韩国产综合新一区| www.日韩不卡电影av| 欧美性感美女h网站在线观看免费| 欧美日韩激情视频| 色婷婷综合久久久久| 久久久免费在线观看| 国产精品成人aaaaa网站| 亚洲一区中文字幕在线观看| 欧美极品xxxx| 国产精品1234| 亚洲电影在线观看| 国产精品久久久久久久久影视| 精品国产一区二区三区久久久狼| 欧美一级淫片videoshd| 情事1991在线| 中文字幕精品一区久久久久| 欧美色另类天堂2015| 国产精品三级美女白浆呻吟| 大桥未久av一区二区三区| 欧美大胆在线视频| 亚洲国产成人精品电影| 欧美午夜xxx| 久热精品在线视频| 久久精品久久久久久| 欧美日产国产成人免费图片| 国产极品精品在线观看| 国产午夜精品久久久| 欧美丝袜美女中出在线| 在线亚洲男人天堂| 国产精品视频导航| 一级做a爰片久久毛片美女图片| 久久在线精品视频| 国产精品高潮呻吟久久av黑人| 黑人极品videos精品欧美裸| 中文字幕免费精品一区| 久久精品亚洲一区| 国产精品久久久久久久久久免费| 国产成人精品久久| 欧美性xxxxhd| 亚洲aⅴ日韩av电影在线观看| 黑人极品videos精品欧美裸| 中文字幕亚洲专区| 成人精品在线观看| 亚洲欧洲偷拍精品| 九九热精品视频在线播放| 亚洲欧洲av一区二区| 日韩精品在线视频美女| 777777777亚洲妇女| 国产精品久久久久影院日本| 欧美日韩免费一区| 国产精品国产三级国产aⅴ浪潮| 九九热99久久久国产盗摄| 久久综合色88| 性视频1819p久久| 国产一区私人高清影院| 色综合久久精品亚洲国产| 亚洲在线视频福利| 久久精品国产欧美激情| 国产精品免费福利| 中文字幕9999| 国产精品久久久久久久9999| 欧美裸体xxxx极品少妇软件| 奇米一区二区三区四区久久| 欧美一级电影久久| 国产精品久久久久久搜索| 在线观看不卡av| 欧美日韩国产成人在线观看| 国产主播喷水一区二区| 欧美黑人xxxⅹ高潮交| 这里精品视频免费| 久久久伊人欧美| 伊人久久久久久久久久久久久| 自拍视频国产精品| 91亚洲精品久久久久久久久久久久| 欧美成人三级视频网站| 7m第一福利500精品视频| 精品成人69xx.xyz| 精品自拍视频在线观看| 国产精品扒开腿做爽爽爽的视频| 亚洲精品国精品久久99热| 久久久久久久久久久成人| 日本久久久久亚洲中字幕| 国产精品女主播| 欧美黑人国产人伦爽爽爽| 欧美成人四级hd版| 日韩av不卡电影| 欧美成人一区二区三区电影| 久久国产精品99国产精| 神马久久桃色视频| 日韩精品在线观看一区| 国产欧美精品一区二区三区-老狼| 国产精品高清网站| 亚洲精品国产成人| 久久人91精品久久久久久不卡| 日韩av综合网| 国产一区二区三区毛片| 欧美洲成人男女午夜视频| 亚洲国产精品久久精品怡红院| 国产精品www| 亚洲xxxx做受欧美| 最近2019年好看中文字幕视频| 久久国产精品久久国产精品| 欧美成人午夜激情视频| 欧美国产在线电影| 国产精品99蜜臀久久不卡二区| 国产精品青青在线观看爽香蕉| 九九九热精品免费视频观看网站| 国产精品美女呻吟| 国产一区二区三区精品久久久| 国产精品xxx视频| 国产精品99久久久久久人| 亚洲成人精品视频在线观看| 成人免费xxxxx在线观看| 国产亚洲欧洲黄色| 久久久久久久久网站| 中文字幕在线日韩| 亚洲免费人成在线视频观看| 国产精品青青在线观看爽香蕉| 国产欧美亚洲精品| 91精品国产高清| 国产精品99久久久久久www| 亚洲人成网站免费播放| 日韩中文字幕在线| 欧美一级黑人aaaaaaa做受| 欧美性xxxx极品hd欧美风情| 成人有码在线视频| 久久精品91久久香蕉加勒比| 亚洲999一在线观看www| 性欧美暴力猛交69hd| 久久综合网hezyo| 日韩精品在线观| 亚洲人成网站色ww在线| 亚洲精品日韩av| 国产女精品视频网站免费| 精品久久久久久久久久久久| 91人成网站www| 欧美韩国理论所午夜片917电影| 亚洲一区二区久久| 国内精品模特av私拍在线观看| 国产精品久久久av久久久| 国产成人精品日本亚洲专区61| 国产精品自产拍在线观看| 国产精品热视频| 国产精品极品尤物在线观看| 亚洲色图日韩av| 亚洲国产日韩欧美在线动漫| 欧美肥臀大乳一区二区免费视频| 亚洲精品福利在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 久久精品成人欧美大片| 欧美精品激情在线| 欧美激情视频给我| 国产午夜精品理论片a级探花| 亚洲天堂第二页| 亚洲精品在线视频| 伊人av综合网| 亚洲欧美www|