日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue3 可拖動的左右面板分割組件實現(xiàn)

瀏覽:95日期:2022-09-29 09:35:15
目錄分解組件左側面板右側面板入參分解propsslots具體實現(xiàn)如何拖動呢?事件監(jiān)聽寬度處理優(yōu)化buggit地址

最近在使用vue的時候,遇到一個需求,實現(xiàn)左右div可通過中間部分拖拽調整寬度,本文就整理一下,分享給大家,具體如下:

效果圖

vue3 可拖動的左右面板分割組件實現(xiàn)

分解組件

整體使用flex布局

左側面板 面板的具體內容通過slot具名插槽傳入。 title通過prop傳入 可拖動,為了保證內容樣式不會被拖動所破壞,對面板的寬度設定最大值/最小值右側面板 右側面板寬度隨著左側面板的寬度變化而變化,此處需注意,內容的寬度使用flex-auto自動適應。 需要做移動端的自適應。 自適應使用tailwind的媒體查詢

vue3 可拖動的左右面板分割組件實現(xiàn)

入參分解props @param {Number} maxWidth 最大寬度 @param {Number} minWidth 最小寬度 @param {String} leftTitle 左標題 @param {String} rightTitle 右標題? @param {Boolean} sotoreage 是否存儲與localstoregeslots left-content {Element} 左側內容 right-content {Element} 右側內容具體實現(xiàn)如何拖動呢?

在左側面板與右側面板之間添加一個隱藏的盒子,我將這個盒子隱藏在box-shadow之中。具體事件放在這個div中實現(xiàn)

<div class='w-2 cursor-move hidden md4:block'onMousedown={hnadleMouseDown}></div>事件監(jiān)聽

const hnadleMouseDown = (evt: MouseEvent) => { /* 獲取起始點位,并存儲 */ let { pageX, pageY } = evt; basePosition.pageX = pageX; basePosition.pageY = pageY; /* 監(jiān)聽鼠標的移動事件 */ document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); }; const handleMouseMove = evt => { /* 阻止瀏覽器默認事件,防止觸發(fā)瀏覽器的手勢功能 */ evt.preventDefault(); /* 設置定時器,防止dom多次回流 */ clearTimeout(timer.value); timer.value = setTimeout(() => {let { pageX } = evt;const baseDiv = document.querySelector('.right-border-shadow');/* 處理寬度,是否處于最大值/最小值之間 */let baseWidth: Number | undefined = Number(baseDiv?.clientWidth) + (pageX - basePosition.pageX);baseWidth = baseWidth > Number(props?.maxWidth) ? props.maxWidth : baseWidth;baseWidth = Number(baseWidth) < Number(props?.minWidth) ? props.minWidth : baseWidth;baseDiv?.setAttribute('style', `width:${baseWidth}px`);/* emit寬度改變的事件 */ctx.emit('drugend');/* 存儲到store */setStore(baseWidth); }, 50); }; const handleMouseUp = evt => { /* 結束拖動之后,取消事件監(jiān)聽,并emit出最終寬度 */ const width = document.querySelector('.right-border-shadow')?.clientWidth; document.removeEventListener('mousemove', handleMouseMove); document.removeEventListener('mouseup', handleMouseUp); ctx.emit('drugend', width); };寬度處理

style={`width:${ store.get('split-width') ? store.get('split-width') : props.minWidth ? props.minWidth : 384 }px`}優(yōu)化

手動改變?yōu)g覽器視窗寬度

nextTick(() => {ctx.emit('load', ctx);MutationObserver = window.MutationObserver;if (MutationObserver) { /* 監(jiān)聽瀏覽器的窗口變化,在部分情況下需要這個api */ mo = new MutationObserver(function() { const __wm = document.querySelector('#rezie-id'); // 只在__wm元素變動才重新調用 __canvasWM if (!__wm) { // 避免一直觸發(fā) mo.disconnect(); mo = null; ctx.emit('resize'); } }); mo.observe(document.querySelector('#rezie-id'), { attributes: true, subtree: true, childList: true, });} });

未生效,求指點

bug

父組件的onMounted鉤子中獲取子元素的slot元素節(jié)點報錯,為null。目前的解決辦法是在子組件的onMounted鉤子中拋出一個load事件,父組件使用onLoad去處理接下來的邏輯。

git地址

倉庫地址預覽地址

到此這篇關于vue3 可拖動的左右面板分割組件實現(xiàn)的文章就介紹到這了,更多相關vue3 可拖動左右分割面板內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91亚洲国产| 欧美激情91| 日韩一区三区| 99精品电影| 亚洲天堂久久| 亚洲午夜精品久久久久久app| 欧美成人精品三级网站| 国产精品99一区二区三| 国内自拍视频一区二区三区| 欧美激情福利| 国产91在线播放精品| 另类小说一区二区三区| 美女久久久久久| 精品欧美日韩精品| sm捆绑调教国产免费网站在线观看 | 日韩国产一区二区| 午夜影院一区| 亚洲午夜精品久久久久久app| 欧美日韩四区| 色8久久久久| 久久av日韩| 色在线视频观看| 欧美在线影院| 免费黄网站欧美| 9国产精品视频| 日韩高清一级| 成人在线视频免费看| 美女毛片一区二区三区四区| 中文不卡在线| 成人羞羞视频在线看网址| 国产精品7m凸凹视频分类| 伊人久久一区| 久久影视三级福利片| 亚洲v在线看| 天使萌一区二区三区免费观看| 日本特黄久久久高潮| 久久男人av资源站| 美女国产精品| 国产精品多人| 精品在线播放| 91精品一区| 国产 日韩 欧美 综合 一区| 蜜臀av免费一区二区三区| 色8久久久久| 捆绑调教日本一区二区三区| 日韩专区欧美专区| 久久69成人| 午夜在线视频观看日韩17c| 国产精品2023| 日韩视频不卡| 免费在线成人| 亚洲一区二区三区免费在线观看 | 色偷偷色偷偷色偷偷在线视频| 日韩一区二区免费看| 国产精品久久久久久久久久齐齐| 免费污视频在线一区| 日韩av成人高清| 91精品国产乱码久久久久久久 | 日韩国产欧美三级| 欧洲精品一区二区三区| 日韩精品视频网站| 婷婷综合六月| 欧美亚洲三级| 欧美女激情福利| 国产精品www.| 亚洲欧美网站| 久久久一本精品| 国产九九精品| 老色鬼久久亚洲一区二区| 视频在线不卡免费观看| 亚洲2区在线| 久久精品高清| 久久精品日韩欧美| 日韩国产欧美三级| 欧美特黄一区| 亚洲成a人片| 蜜桃精品视频| 日韩高清欧美激情| 亚洲主播在线| 免费观看亚洲| 欧美精品第一区| 日本在线一区二区三区| 激情久久久久久| 日韩成人a**站| 国产精品调教视频| 日韩中文字幕| 久久国产福利| 一区二区小说| 日韩在线观看一区| 久久中文字幕一区二区| 欧美在线精品一区| 亚洲午夜久久| 美女日韩在线中文字幕| 欧美搞黄网站| 蜜桃av在线播放| 国产一区二区三区不卡视频网站 | 日韩电影免费网址| 欧美激情aⅴ一区二区三区| 日韩免费精品| 丝袜美腿亚洲一区二区图片| 欧美午夜精品一区二区三区电影| 高清一区二区三区| 麻豆精品久久久| 国产精品毛片久久久| 日韩av一级片| 亚洲乱码一区| 久久av一区| 亚洲国产日韩欧美在线| 欧美日韩在线观看视频小说| 国产 日韩 欧美一区| 人人草在线视频| 麻豆视频在线观看免费网站黄| 精品免费视频| 国产高潮在线| 日韩不卡在线| 999精品色在线播放| 欧美精选视频一区二区| 国产在线一区不卡| 精品久久久久中文字幕小说| 久久99蜜桃| 久久精品国产久精国产| 精品国产一区二| 麻豆精品99| 不卡专区在线| 成人久久一区| 黄色av日韩| 久久福利精品| 亚欧成人精品| 久久狠狠久久| 国产精品大片| 国产精品jk白丝蜜臀av小说| 久久精品99国产精品| 国产精品日韩精品在线播放| 日韩欧美一区免费| 久久精品 人人爱| 欧美有码在线| 久久精品99久久久| 日本亚州欧洲精品不卡| 亚洲18在线| 国产精品久久久久毛片大屁完整版| 国产精品99久久久久久董美香| 精品九九久久| 99久精品视频在线观看视频| 欧美影院三区| 男人的天堂久久精品| 亚洲免费一区三区| 欧美一区不卡| 成人高清一区| 欧美中文字幕一区二区| 国产麻豆综合| 91精品国产自产精品男人的天堂| 国产精品久一| 毛片在线网站| 9色国产精品| 91成人在线| 在线亚洲人成| 亚洲天堂av资源在线观看| 欧美激情福利| 欧美日韩中文一区二区| 亚洲三级网址| 久久精品天堂| 国产综合精品| 日韩影片在线观看| 国产aⅴ精品一区二区三区久久| 不卡中文字幕| 国产美女视频一区二区| 成人看片网站| 综合一区二区三区| 午夜电影一区| 日韩av二区| 亚洲影院天堂中文av色| 国产中文在线播放| 国产精品手机在线播放| 四季av一区二区凹凸精品| 激情久久久久久久| 婷婷综合一区| 国产一区二区三区不卡av| 91九色精品| 欧美日韩一区自拍| 国产精品伦理久久久久久| 国产精品社区| 精品国产一级| 久久中文字幕av| 日本免费新一区视频| 日本免费一区二区三区四区| 综合一区在线| 精品亚洲美女网站| 日韩av资源网| 久久精品国产68国产精品亚洲| 日韩va欧美va亚洲va久久| 日韩国产一区二区三区| 欧美aa一级| 久久精品一区二区不卡| 亚洲欧美日韩一区在线观看| 天堂va在线高清一区| 国产日韩综合| 天堂资源在线亚洲| 清纯唯美亚洲综合一区| 亚洲毛片视频| 日韩黄色大片|