亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

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

解決VUE自定義拖拽指令時 onmouseup 與 click事件沖突問題

瀏覽:92日期:2022-12-29 14:27:52

功能描述:

解決VUE自定義拖拽指令時 onmouseup 與 click事件沖突問題

解決VUE自定義拖拽指令時 onmouseup 與 click事件沖突問題

如圖,右側(cè)懸浮菜單按鈕,只支持上下方向拖動,點擊時展開或關(guān)閉菜單。

BUG說明:

鼠標(biāo)上下方向拖拽,如果松開時鼠標(biāo)位于懸浮按鈕上會默認(rèn)執(zhí)行click事件,經(jīng)驗證,click事件與mouse事件的執(zhí)行順序為onmousedown =》onmouseup =》onclick,意味著在click事件執(zhí)行時會與與其相關(guān)的mouse事件沖突。

解決方案:

因為click事件執(zhí)行時間短,所以利用鼠標(biāo)拖動的時間差作為標(biāo)志,在拖拽事件中計算鼠標(biāo)從onmousedown 到onmouseup 所用的時間差,與200ms作比較,作為全局變量。由于vue的directives自定義指令中無法使用this,所以個人采用給元素設(shè)置屬性的方式來解決全局變量的存儲問題。

1、自定義上下拖拽指令

說明:指令中沒有this關(guān)鍵字,指令中通過el可以直接拿到指令綁定的元素;

directives: { drag: { // 指令的定義 bind: function (el) { let odiv = el; //獲取當(dāng)前元素 let firstTime=’’,lastTime=’’; odiv.onmousedown = (e) => { document.getElementById(’dragbtn’).setAttribute(’data-flag’,false) firstTime = new Date().getTime(); // 算出鼠標(biāo)相對元素的位置 let disY = e.clientY - odiv.offsetTop; document.onmousemove = (e) => { // 用鼠標(biāo)的位置減去鼠標(biāo)相對元素的位置,得到元素的位置 let top = e.clientY - disY; // 頁面范圍內(nèi)移動元素 if (top > 0 && top < document.body.clientHeight - 48) {odiv.style.top = top + ’px’; } }; document.onmouseup = (e) => {document.onmousemove = null;document.onmouseup = null;// onmouseup 時的時間,并計算差值lastTime = new Date().getTime();if( (lastTime - firstTime) < 200){ document.getElementById(’dragbtn’).setAttribute(’data-flag’,true)} }; }; } } },

2、懸浮菜單點擊事件中進(jìn)行驗證。

click(e) { // 驗證是否為點擊事件,是則繼續(xù)執(zhí)行click事件,否則不執(zhí)行 let isClick = document.getElementById(’dragbtn’).getAttribute(’data-flag’); if(isClick !== ’true’) { return false } if (!localStorage.settings) { return this.$message.error(’請選擇必填項并保存’); } if (this.right === -300) { this.right = 0; this.isMask = true; } else { this.right = -300; this.isMask = false; } },

補(bǔ)充知識:vue 子組件 created 方法不執(zhí)行問題

近期做了一個項目 里面有一個樹形菜單,將數(shù)據(jù)寫在 js (死數(shù)據(jù))中,所有的東西都能夠正常執(zhí)行(i 標(biāo)簽,子節(jié)點,父節(jié)點),但是當(dāng)在請求接口文件或者請求后臺數(shù)據(jù)的時候,發(fā)現(xiàn)引入的子組件的created方法不執(zhí)行,但是點擊父級菜單展開時還是能夠觸發(fā),后來發(fā)現(xiàn) 是生命周期的問題,仔細(xì)查看一下,后來解決!

解決方法如下:

用watch 檢測一下data的數(shù)據(jù)變化,created方法既然在點擊的時候執(zhí)行,所以也必須保留,好啦,就這樣!

以上這篇解決VUE自定義拖拽指令時 onmouseup 與 click事件沖突問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 国内精品九一在线播放 | 欧美日韩一级大片 | 免费观看一级成人毛片 | 欧美成人一级视频 | 国产黄色a三级三级三级 | 欧美一区视频在线 | 在线免费观看一级毛片 | 日韩一级a毛片欧美区 | 欧美亚洲日本国产 | 亚洲视频在线免费 | 视频一区欧美 | 国产在线高清视频 | 精品久久久中文字幕二区 | 亚洲精品久久久久久久777 | 波多野结衣福利视频 | 黄色一级毛片免费 | 在线亚洲黄色 | 欧美在线日韩在线 | 性生活视频网站 | 亚洲成人手机在线 | 欧美精品在线免费观看 | 手机在线色 | 美女张开腿给男人桶 | 国产高清一级视频在线观看 | 在线高清免费爱做网 | 午夜影院黄色 | 国产三级网站在线观看 | 免费观看日本特色做爰视频在线 | a在线观看欧美在线观看 | 日韩在线一区二区三区 | 肥婆毛片| 欧美一级看片 | 国产日韩一区二区三区在线播放 | 国产短视频精品一区二区三区 | 8050网午夜一级毛片免费不卡 | 精品亚洲视频在线观看 | 丁香婷婷影音先锋5566 | 天干夜天天夜天干天ww | 九九热视频在线播放 | 在线亚洲精品视频 | 国产女王女m视频vk 国产女王丨vk |