国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

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

解決vue的touchStart事件及click事件沖突問題

瀏覽:118日期:2023-01-01 09:26:31

一 、問題:

今天遇到這樣問題,給某個元素同時綁定touchStart及click事件后,若在移動設備上,當你點擊時,會依次出發這兩個事件。因為移動端設備上的click事件觸發是會延遲300ms,所以touchStart事件會先觸發后再觸發click事件。這樣導致每次都要執行兩次,這樣毫無意義。這里提醒下,PC是無法識別touch相關事件

二、解決方式

(1)preventDefault方法

通過使用preventDefault方法(阻止元素默認事件行為的發生)來解決。在touchstart中添加 e.preventDefault()就可以阻止click事件觸發。

模板

<ul class='list'> <li v-for='item of letters' :key='item' :ref='item' @touchstart='handleTouchStart' @click='handleleterClick' >{{item}}</li> </ul>

上面模板可以使用vue事件修飾符@touchstart.stop.prevent實現,但method中的handleTouchStart 就無需添加 e.preventDefault();

<ul class='list'> <li v-for='item of letters' :key='item' :ref='item' @touchstart.stop.prevent='handleTouchStart' @click='handleleterClick' >{{item}}</li> </ul>

methods: { handleleterClick (e) { console.log(’click事件執行一次’) this.$emit(’change’, e.target.innerText) }, handleTouchStart (e) { console.log(’TouchStart執行一次’) e.preventDefault()//添加阻止click事件觸發 this.touchStatus = true } }}

未添加 e.preventDefault()前打印結果

解決vue的touchStart事件及click事件沖突問題

添加 e.preventDefault()后打印結果

解決vue的touchStart事件及click事件沖突問題

(2)判斷瀏覽器是否支持觸屏事件

通過'ontouchend' in document來判斷瀏覽器是否支持觸屏事件,若支持調用touch事件,不支持調用click事件。

<ul class='list'> <li v-for='item of letters' :key='item' :ref='item' @click='handleSelfClick' >{{item}}</li> </ul>

methods: { handleleterClick (e) { console.log(’click事件執行一次’) this.$emit(’change’, e.target.innerText) }, handleTouchStart (e) { console.log(’TouchStart執行一次’) this.touchStatus = true }, handleSelfClick (e) { console.log(’ontouchstart’ in document)//打印是否支持touch事件。 if (’ontouchstart’ in document) { this.handleTouchStart(e) } else { this.handleleterClick(e) } } }

以上這篇解決vue的touchStart事件及click事件沖突問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
主站蜘蛛池模板: 慈溪市| 习水县| 尚志市| 远安县| 垦利县| 泸州市| 垦利县| 临夏市| 如东县| 昔阳县| 沙河市| 华坪县| 盐源县| 岳池县| 台湾省| 绍兴县| 隆子县| 赞皇县| 石首市| 包头市| 杭锦旗| 深圳市| 牙克石市| 河池市| 华安县| 昌吉市| 新河县| 肇源县| 池州市| 虎林市| 旬阳县| 永年县| 万州区| 佛冈县| 林州市| 长子县| 宁陕县| 廊坊市| 观塘区| 贞丰县| 旬阳县|