element?UI中el-dialog實(shí)現(xiàn)拖拽功能示例代碼
element UI中dialog組件經(jīng)常會(huì)用到,如果能讓其任意拖拽放到不同的位置就更好了,實(shí)現(xiàn)方法如下:
dialogDraggable.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) => {
// 鼠標(biāo)按下,計(jì)算當(dāng)前元素距離可視區(qū)的距離
const disX = e.clientX - dialogHeaderEl.offsetLeft
const disY = e.clientY - dialogHeaderEl.offsetTop
// 獲取到的值帶px 正則匹配替換
let styL, styT
// 注意在ie中 第一次獲取到的值為組件自帶50% 移動(dòng)之后賦值為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) {
// 通過(guò)事件委托,計(jì)算移動(dòng)的距離
const l = e.clientX - disX
const t = e.clientY - disY
// 移動(dòng)當(dāng)前元素
dragDom.style.left = `${l + styL}px`
dragDom.style.top = `${t + styT}px`
// 將此時(shí)的位置傳出去
// binding.value({x:e.pageX,y:e.pageY})
}
document.onmouseup = function(e) {
document.onmousemove = null
document.onmouseup = null
}
}
}
})
main.js 引用:
import ‘@/assets/dialogDraggable.js'
模塊中引用
< el-dialog v-dialogDrag></ el-dialog>
有幾個(gè)點(diǎn)須要注意一下瀏覽器
- 每一個(gè)彈窗都要有惟一dom可操做 指令能夠作到
- 拖拽時(shí)要添加可拖拽區(qū)塊 header
- 因?yàn)閑lement-ui dialog組件在設(shè)計(jì)時(shí)寬度用了百分比, 這里不一樣瀏覽器有兼容性問(wèn)題
- 實(shí)現(xiàn)拖拽寬高時(shí) 獲取邊緣問(wèn)題 div定位 設(shè)置模擬邊緣
總結(jié)
到此這篇關(guān)于element UI中el-dialog實(shí)現(xiàn)拖拽功能的文章就介紹到這了,更多相關(guān)el-dialog實(shí)現(xiàn)拖拽功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue axios請(qǐng)求頻繁時(shí)取消上一次請(qǐng)求的方法
這篇文章主要介紹了vue axios請(qǐng)求頻繁時(shí)取消上一次請(qǐng)求的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
vue響應(yīng)式原理與雙向數(shù)據(jù)的深入解析
Vue 最獨(dú)特的特性之一,是其非侵入性的響應(yīng)式系統(tǒng)。下面這篇文章主要給大家介紹了關(guān)于vue響應(yīng)式原理與雙向數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2021-06-06
vue3+vite項(xiàng)目中按需引入vant報(bào)錯(cuò):Failed?to?resolve?import的解決方案
最近在vue項(xiàng)目中引入vant的時(shí)候發(fā)現(xiàn)報(bào)錯(cuò)了,經(jīng)過(guò)嘗試發(fā)現(xiàn)了問(wèn)題,現(xiàn)將完整引入流程提供給大家參考,下面這篇文章主要給大家介紹了關(guān)于vue3+vite項(xiàng)目中按需引入vant報(bào)錯(cuò):Failed?to?resolve?import的解決方案,需要的朋友可以參考下2022-12-12
使用watch監(jiān)聽路由變化和watch監(jiān)聽對(duì)象的實(shí)例
下面小編就為大家分享一篇使用watch監(jiān)聽路由變化和watch監(jiān)聽對(duì)象的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Vue中l(wèi)ocalStorage的用法和監(jiān)聽localStorage值的變化
這篇文章主要介紹了Vue中l(wèi)ocalStorage的用法和監(jiān)聽localStorage值的變化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
vue動(dòng)態(tài)菜單、動(dòng)態(tài)路由加載以及刷新踩坑實(shí)戰(zhàn)
這篇文章主要給大家介紹了關(guān)于vue動(dòng)態(tài)菜單、動(dòng)態(tài)路由加載以及刷新踩坑的相關(guān)資料,踩的這些坑其實(shí)是挺常見的,大家可以看看,避免遇到的時(shí)候再踩到同樣的坑,需要的朋友可以參考下2021-10-10
vue實(shí)現(xiàn)檢測(cè)敏感詞過(guò)濾組件的多種思路
這篇文章主要介紹了vue編寫檢測(cè)敏感詞匯組件的多種思路,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下2021-04-04
Vue2實(shí)現(xiàn)數(shù)字滾動(dòng)翻頁(yè)效果的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue2如何實(shí)現(xiàn)數(shù)字滾動(dòng)翻頁(yè)效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-03-03

