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

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

vue模塊移動(dòng)組件的實(shí)現(xiàn)示例

瀏覽:50日期:2023-01-19 17:03:13

一直都想實(shí)現(xiàn)類似于五百丁中簡(jiǎn)歷填寫(xiě)中模塊跟隨鼠標(biāo)移動(dòng)的組件,最近閑來(lái)無(wú)事,自己琢磨實(shí)現(xiàn)了一個(gè)差不多的組件。

vue模塊移動(dòng)組件的實(shí)現(xiàn)示例

其中每個(gè)模塊都是組件調(diào)入(項(xiàng)目經(jīng)驗(yàn)、教育經(jīng)驗(yàn)、工作經(jīng)驗(yàn)等),所以這里也用到了動(dòng)態(tài)加載組件方式。

思路:鼠標(biāo)移入模塊,顯示相應(yīng)模塊的點(diǎn)擊移動(dòng)按鈕,點(diǎn)擊A模塊移動(dòng)按鈕,此時(shí)原先A模塊所在的位置上變?yōu)橥蟿?dòng)到這里綠框模塊,同時(shí)鼠標(biāo)下懸浮著A模塊,鼠標(biāo)移動(dòng),懸浮的A模塊跟隨移動(dòng),綠框也跟隨上下移動(dòng)。

父組件

1、父組件template中的代碼

<div ref='compBox'> <component v-for='(item, index) in comRoute' :is='item' :key='index' @getData='getData'></component> <div : ref='translateBox' v-if='transType'> <component :is='transCom'></component> </div></div>

2、data中定義的屬性

comList: [’educationExp’, ’workExp’, ’projectExp’], // 模塊列表comLen: 0, // 模塊的長(zhǎng)度comType: ’’, // 當(dāng)前移動(dòng)的模塊transType: ’’, // 當(dāng)前移動(dòng)的模塊coordinate: { // 鼠標(biāo)坐標(biāo) mouseX: 0, mouseY: 0,},downFlag: false, // 當(dāng)前是否點(diǎn)擊模塊移動(dòng)mouseYBefore: 0, // 記錄鼠標(biāo)點(diǎn)擊時(shí)Y坐標(biāo)以及鼠標(biāo)每移動(dòng)30后重新記錄鼠標(biāo)Y坐標(biāo)mouseYLast: 0, // 實(shí)時(shí)記錄鼠標(biāo)移動(dòng)時(shí)的Y坐標(biāo)nowCom: ’’, // 移動(dòng)模塊時(shí),上一個(gè)模塊或者下一個(gè)模塊的名稱forFlage: false, // forEach遍歷結(jié)束的標(biāo)識(shí)comRoute: [], // 動(dòng)態(tài)加載組件列表transCom: null, // 點(diǎn)擊后懸浮的組件compBox: null, // 獲取當(dāng)前組件在頁(yè)面中的位置信息

3、scrollTop為頁(yè)面滾動(dòng)的距頂部的距離,從父組件傳過(guò)來(lái)

props: { scrollTop: Number,}

4、watch一些屬性

watch: { comList: { handler(val) { this.getCom(val); // 模塊列表改變時(shí),實(shí)時(shí)加載組件 }, deep: true, immediate: true, // 聲明了之后會(huì)立馬執(zhí)行handler里面的函數(shù) }, transType(val) { // 懸浮模塊加載組件 if (val) { this.transCom = () => import(`./default/${val}`); } }, scrollTop: { // 監(jiān)聽(tīng)頁(yè)面滾動(dòng) handler() {}, immediate: true, }, comType(newVal) { if (newVal) { this.comList.forEach((item, index) => { if (item === newVal) { this.comList[index] = ’moveBox’; // 將組建列表中為comType的元素改為moveBox組件 } }); this.getCom(this.comList); } }, downFlag(newVal) { // 鼠標(biāo)已經(jīng)點(diǎn)擊 const nowThis = this; document.onmousemove = function (e) { if (newVal) { // 鼠標(biāo)移動(dòng)賦值 nowThis.coordinate.mouseX = e.clientX; nowThis.coordinate.mouseY = e.clientY; } }; document.onmouseup = function () { // 鼠標(biāo)松開(kāi) document.onmousemove = null; if (newVal) { nowThis.transType = ’’; // 懸浮組件置空 nowThis.comList.forEach((item, index) => { if (item === ’moveBox’) { // 尋找moveBox所在位置 nowThis.comList[index] = nowThis.comType; // 還原成點(diǎn)擊組件 } }); nowThis.downFlag = false; nowThis.comType = ’’; nowThis.getCom(nowThis.comList); } }; }, coordinate: { handler(newVal) { // 懸浮組件位置 this.$refs.translateBox.style.top = `${newVal.mouseY + this.scrollTop - 40 - this.compBox.y}px`; this.$refs.translateBox.style.left = `${newVal.mouseX - this.compBox.x - 200}px`; this.mouseYLast = newVal.mouseY; }, deep: true, }, mouseYLast(newVal) { // 鼠標(biāo)移動(dòng)Y坐標(biāo) this.forFlage = false; if (newVal - this.mouseYBefore > 30) { // 移動(dòng)30鼠標(biāo)向下移,每移動(dòng)30,moveBox移動(dòng)一次 this.comList.forEach((item, index) => { if (item === ’moveBox’ && index < this.comLen - 1 && !this.forFlage) { this.nowCom = this.comList[index + 1]; this.$set(this.comList, index + 1, ’moveBox’); this.$set(this.comList, index, this.nowCom); this.mouseYBefore = newVal; this.forFlage = true; } }); } else if (newVal - this.mouseYBefore < -30) { // 鼠標(biāo)向上移 this.comList.forEach((item, index) => { if (item === ’moveBox’ && index > 0 && !this.forFlage) { this.nowCom = this.comList[index - 1]; // this.comList[index - 1] = ’moveBox’; // this.comList[index] = this.nowCom; // this.comList[index]數(shù)組中采用這種方式賦值,vue是不能檢測(cè)到數(shù)組的變動(dòng)的 this.$set(this.comList, index - 1, ’moveBox’); this.$set(this.comList, index, this.nowCom); this.mouseYBefore = newVal; this.forFlage = true; } }); } },},

其中 forFlage的作用是,在forEach中不能使用break這樣來(lái)結(jié)束循環(huán),所以用forFlage來(lái)表示,當(dāng)遍歷到moveBox后, 就結(jié)束遍歷

5、methods

methods: { getCom(val) { this.comRoute = []; val.forEach((item) => { this.comRoute.push(() => import(`./default/${item}`)); }); }, getData(data, dataY, dataX) { // 模塊組件點(diǎn)擊后,父組件中調(diào)用此方法,并傳值過(guò)來(lái) this.comType = data; this.transType = data; // 目前考慮點(diǎn)擊后立即移動(dòng),點(diǎn)擊不移動(dòng)的情況后期再考慮 this.downFlag = true; this.mouseYBefore = dataY; this.$nextTick(() => { this.$refs.translateBox.style.top = `${dataY + this.scrollTop - 40 - this.compBox.y}px`; this.$refs.translateBox.style.left = `${dataX - this.compBox.x - 200}px`; }); },},

6、mounted

mounted() { this.comLen = this.comList.length; this.compBox = this.$refs.compBox.getBoundingClientRect(); const that = this; window.onresize = () => (() => { that.compBox = this.$refs.compBox.getBoundingClientRect(); })();},

子組件

1、子組件template代碼

<div class='pad-box hover-box name-box'> <p class='absolute-box'> <i @mousedown='mouseDown'></i> <i class='el-icon-circle-plus operation-icon'></i> <i class='el-icon-s-tools operation-icon'></i> </p> 教育經(jīng)驗(yàn)</div>

2、script

export default { name: ’educationExp’, data() { return { comType: ’educationExp’, mouseYBefore: 0, mouseXBefore: 0, }; }, methods: { mouseDown(e) { this.mouseYBefore = e.clientY; this.mouseXBefore = e.clientX; this.$emit(’getData’, this.comType, this.mouseYBefore, this.mouseXBefore); }, },};

到此這篇關(guān)于vue模塊移動(dòng)組件的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)vue模塊移動(dòng)組件內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品免视看国产成人| 四虎精品永久免费| 亚洲夜间福利| 国产精品婷婷| 日韩欧美美女在线观看| 蜜臀av在线播放一区二区三区| 国产激情精品一区二区三区| 黄在线观看免费网站ktv| 黄色成人91| 日韩一区二区三区四区五区| 国产精品亚洲欧美日韩一区在线| 欧美特黄一区| 欧美专区一区二区三区| 蜜臀av一区二区在线免费观看| 日韩免费精品| 国产精品综合色区在线观看| 国产极品嫩模在线观看91精品| 水蜜桃精品av一区二区| 久久国产日韩| av成人国产| 日韩欧美另类中文字幕| 日韩欧美精品一区二区综合视频| 日韩精品五月天| 欧美日韩一区自拍| 国语精品一区| 欧美日韩中文字幕一区二区三区| 先锋影音国产一区| 中文一区一区三区高中清不卡免费| 中文字幕免费一区二区| 91精品视频一区二区| 91tv亚洲精品香蕉国产一区| 青草久久视频| 国产精品呻吟| 国产精品女主播一区二区三区| 国产黄大片在线观看| 另类国产ts人妖高潮视频| 日韩免费av| 日韩午夜黄色| 国产精品亚洲人成在99www | 麻豆久久久久久| 久久精品官网| 日韩精品视频网站| 久久久亚洲欧洲日产| 国产在线看片免费视频在线观看| 亚洲视频播放| 久久精品国产成人一区二区三区| 亚洲一级黄色| 国产日韩欧美一区二区三区在线观看 | 1024精品久久久久久久久| 免费不卡在线观看| 麻豆精品99| 视频一区二区不卡| 国产精品蜜芽在线观看| 免费在线观看日韩欧美| 国产欧美二区| 婷婷综合激情| 国产精品亚洲一区二区在线观看| 国产精品二区不卡| 欧美特黄一级| 久久精品国产网站| 日韩在线免费| 国产一区二区三区不卡视频网站| 日韩欧美午夜| 日本a口亚洲| 亚洲久草在线| 日日夜夜免费精品| 国产日韩一区二区三区在线| 欧美日韩四区| 亚洲专区视频| 久久亚洲资源中文字| 婷婷激情综合| 亚洲小说春色综合另类电影| 亚洲主播在线| 最近国产精品视频| 91视频一区| 日韩中出av| 国模精品一区| 午夜av成人| 日韩中文字幕视频网| 桃色一区二区| 国产精品免费大片| 免费在线成人网| 日韩国产专区| 久久国产乱子精品免费女| 伊人成人网在线看| 日韩中文字幕高清在线观看| 97精品资源在线观看| 黄色亚洲免费| 久久天堂av| 五月天久久久| 亚洲精品在线国产| 天堂√8在线中文| 欧美一区二区性| 91欧美极品| 久久精品国产大片免费观看| 国产精品香蕉| 国产日韩1区| 日韩综合一区二区| 噜噜噜躁狠狠躁狠狠精品视频 | 一区二区视频欧美| 国产一区二区三区网| 免费在线观看视频一区| 免费视频国产一区| 日韩在线二区| 老司机精品在线| 日本视频一区二区| 亚洲另类黄色| 99亚洲视频| 欧洲激情综合| 欧美一级鲁丝片| 国产一区二区三区四区五区| 国产精品一区二区三区av| 日韩一区二区三免费高清在线观看| 欧美日韩第一| 欧美精品羞羞答答| 国产精品88久久久久久| av高清不卡| 国产自产自拍视频在线观看| 精品国产亚洲日本| 精品国产麻豆| 欧美国产免费| 国产精品美女久久久久久不卡| 日韩精品三区四区| 91精品一区| 国产免费av国片精品草莓男男| 日韩欧美中文字幕在线视频| 日本不卡视频在线观看| 久久亚洲黄色| 国产在线日韩| 日本成人在线一区| 天堂av在线| 欧美日韩亚洲三区| 国产精品久久久久久久免费软件| 欧美激情日韩| 久久国产小视频| 丝袜亚洲另类欧美| 国产日产高清欧美一区二区三区| 国产午夜精品一区在线观看| 亚洲天堂黄色| 蜜桃国内精品久久久久软件9| 婷婷亚洲五月| 日韩在线一区二区| 亚洲美女91| 国产乱码精品一区二区亚洲| 国产精品白丝一区二区三区| 免费在线亚洲欧美| 日本亚州欧洲精品不卡| 清纯唯美亚洲综合一区| 国产精品欧美在线观看| 你懂的亚洲视频| av一区在线| 亚洲欧美日韩精品一区二区| 日本久久一区| 精品黄色一级片| 日韩精品一区二区三区免费观影| 在线综合欧美| 国产亚洲电影| 精品日韩视频| 视频在线观看国产精品| 日本欧美一区二区| 久久免费精品| 久久激情网站| 亚洲欧美在线综合| 国产精品久久久久9999高清| 高清av不卡| 天堂va蜜桃一区二区三区| 国产精品一区二区99| 成人小电影网站| 乱人伦精品视频在线观看| 久久国产视频网| 亚洲高清成人| 亚洲欧美在线专区| 国产精品一级| 日韩区欧美区| 一区二区精品| 久久精品国产亚洲aⅴ| 久久久亚洲一区| 精品免费av| 狠狠久久伊人中文字幕| 久久av超碰| 国产美女高潮在线| 99视频精品全部免费在线视频| 欧美日韩在线观看首页| 亚洲综合日韩| 日韩在线二区| 亚洲青青久久| 狠狠躁少妇一区二区三区| 在线国产一区| 麻豆精品久久| 婷婷综合网站| 国产精品videosex极品| 中文另类视频| 欧美一区二区三区免费看| 久久精品官网| 国产欧美自拍一区| 欧美国产91| 国产精品一区二区三区www| 亚洲精品中文字幕乱码| 麻豆国产一区| 亚洲精品一二|