国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Vue使用自定義指令實現(xiàn)拖拽行為實例分析

瀏覽:42日期:2023-01-15 09:37:28

本文實例講述了Vue使用自定義指令實現(xiàn)拖拽行為。分享給大家供大家參考,具體如下:

需求

通過自定義指令的方式實現(xiàn)拖拽效果,預期的使用方式為:

<div v-drag> XXXX</div>

更重要的一個需求點:

拖拽元素內(nèi)部的子元素可以自行阻止拖拽行為

比如:

<div v-drag> <el-button @mousedown.native.stop>test</el-button></div>

曾經(jīng)使用過vue-resizable,由于該組件是通過事件捕獲的方式實現(xiàn)的,拖拽元素的子元素也會觸發(fā)拖拽行為,不符合開發(fā)需求,所以自行實現(xiàn)了拖拽指令,相關源碼如下。

無任何依賴,復制即可使用

源碼

/** * @file 自定義拖拽命令 */import Vue from ’vue’;const Drag = { install(Vue: any) { // 如需禁止拖拽元素內(nèi)部某些元素觸發(fā)拖拽,在內(nèi)部不可觸發(fā)拖拽元素上添加@mousedown.native.stop即可 Vue.directive(’drag’, { bind(el: any) {el.style.position = ’absolute’;el.style.zIndex = el.style.zIndex || ’3000’; }, inserted(el: any) {// 設置元素初始位置const boundingClientRect = el.getBoundingClientRect();el.style.left = boundingClientRect.x + ’px’;el.style.top = boundingClientRect.y + ’px’;// 將拖拽元素置于body子元素,防止被relative的父元素遮擋document.body.appendChild(el);let originX: number;let originY: number;const mouseDownHandler = (evt: MouseEvent) => { originX = evt.clientX - el.offsetLeft; originY = evt.clientY - el.offsetTop; el.style.cursor = ’pointer’;};const mouseMoveHandler = (evt: MouseEvent) => { if (evt.buttons === 1 && originX && originY) { el.style.left = evt.clientX - originX + ’px’; el.style.top = evt.clientY - originY + ’px’; }};const mouseUpHandler = () => { el.style.cursor = ’default’;};el.addEventListener(’mousedown’, mouseDownHandler);el.addEventListener(’mousemove’, mouseMoveHandler);el.addEventListener(’mouseup’, mouseUpHandler);el.__mouseDownHandler__ = mouseDownHandler;el.__mouseMoveHandler__ = mouseMoveHandler;el.__mouseUpHandler__ = mouseUpHandler; }, unbind(el: any) {el.removeEventListener(’mousedown’, el.__mouseDownHandler__);el.removeEventListener(’mousemove’, el.__mouseMoveHandler__);el.removeEventListener(’mouseup’, el.__mouseUpHandler__);// 當父組件銷毀觸發(fā)unbind的時候需要手動刪除這個節(jié)點,不然會一直存留在body中el.parentNode.removeChild(el); } }); }};Vue.use(Drag);export default Drag;

希望本文所述對大家vue.js程序設計有所幫助。

標簽: Vue
相關文章:
主站蜘蛛池模板: 欧美日韩一区二区三区在线视频 | 夜色www国产精品资源站 | 精品自拍一区 | 国产高清在线 | 成人深夜福利在线播放不卡 | 成人黄色在线网站 | 玖玖精品在线视频 | 亚洲永久中文字幕在线 | 第一色区 | 亚洲美女视频网 | 国产免费久久 | 欧美激情免费观看一区 | 韩国精品一区视频在线播放 | 国产亚洲精品美女一区二区 | 在线免费黄网 | 成年免费大片黄在线观看一 | 欧美日韩精品国产一区二区 | 国产精品欧美韩国日本久久 | 久草中文在线观看 | 成人免费一区二区三区视频软件 | 欧美午夜视频在线 | 国产精品日韩欧美在线 | 国产精品看片 | 996久久国产精品线观看 | 国产日韩欧美综合一区二区三区 | 99久久精品国产国产毛片 | 国产高清自拍 | 亚洲国产精品大秀在线播放 | 日本三级网站在线线观看 | 久草a在线| 最新欧美精品一区二区三区不卡 | 日韩中文字幕一在线 | 91热久久免费频精品动漫99 | 亚洲精品欧美精品一区二区 | 成人欧美网站 | 中文国产日韩欧美视频 | 网站免费满18成年在线观看 | 精品中文字幕久久久久久 | rion美乳弹出来四虎在线观看 | 久草福利资源 | 99久久免费看精品国产一区 |