最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中touch和click共存的解決方式

 更新時(shí)間:2020年07月28日 09:28:51   作者:inticaler  
這篇文章主要介紹了vue中touch和click共存的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

在vue開發(fā)手機(jī)端項(xiàng)目時(shí),我們經(jīng)常會(huì)遇到touch和click共存的情況,比如城市選擇頁面的字母滑動(dòng)

touch事件在手機(jī)端會(huì)觸發(fā)瀏覽器滑動(dòng),所以應(yīng)給touch事件添加阻止默認(rèn)行為touchmove.prevent。注意阻止默認(rèn)行為事件不要添加在touchstart事件上,會(huì)影響到click事件的發(fā)生。

touch事件和click事件發(fā)生先后順序:

touchstart,touchmove,touchend,click

補(bǔ)充知識(shí):touchstart與click同時(shí)觸發(fā)

產(chǎn)生沖突的原因

我們可以給某個(gè)元素同時(shí)綁定 touchstart 和 click 事件,但這將會(huì)導(dǎo)致本篇文章解決的問題 – 這兩個(gè)事件在移動(dòng)設(shè)備上會(huì)發(fā)生沖突。

由于移動(dòng)設(shè)備能夠同時(shí)識(shí)別 touchstart 和 click 事件,因此當(dāng)用戶點(diǎn)擊目標(biāo)元素時(shí),綁定在目標(biāo)元素上的 touchstart 事件與 click 事件(約300ms后)會(huì)依次被觸發(fā),也就是說,我們所綁定的回調(diào)函數(shù)會(huì)被執(zhí)行兩次!。這顯然不是我們想要的結(jié)果。

解決方案

(1)原生JS

方法一:

使用事件對(duì)象中的 preventDefault 方法,preventDefault 方法的作用在于:阻止元素默認(rèn)事件行為的發(fā)生,但有意思的是,當(dāng)我們?cè)谀繕?biāo)元素同時(shí)綁定 touchstart 和 click 事件時(shí),在 touchstart 事件回調(diào)函數(shù)中使用該方法,可以阻止后續(xù) click 事件的發(fā)生。

const Button = document.getElementById("targetButton")
Button.addEventListener("touchstart", e => {
 e.preventDefault()
 console.log("touchstart event!")
})
 
Button.addEventListener("click", e => {
 e.preventDefault()
 console.log("click event!")
})

方法二:

基于功能檢測(cè)綁定事件

我們可以通過判斷瀏覽器是否支持 touchstart 事件來封裝元素的點(diǎn)擊事件,這樣客戶端會(huì)根據(jù)當(dāng)前環(huán)境判定元素應(yīng)該綁定的事件類型,代碼如下:

const Button = document.getElementById("targetButton")
const clickEvent = (function() {
 if ('ontouchstart' in document.documentElement === true)
 return 'touchstart';
 else
 return 'click';
})();
 
Button.addEventListener(clickEvent, e => {
 console.log("things happened!")
})

(2) VUE解決方案:

HTML

  <div class="comment-text" 
   @touchstart.prevent="gtouchstart(XXX)"
   @touchend.prevent="triggerReply(XXXX)">
   {{ item.content}}
 </div>

JS

 data: function () {
  return {
     Loop: 0
   };
 }
  gtouchstart: function (XXXX) {
    let self = this;
    //執(zhí)行長(zhǎng)按的內(nèi)容
    self.Loop = setTimeout(function () {
      self.Loop = 0;
      //XXXXXXXXXXXXXXX
    }, 500);
    return false;
  },
  triggerReply: function (XXXX) {
    let self = this;
    clearTimeout(self.Loop);
    //這里click內(nèi)容
    if (self.Loop !== 0) {
       //XXXXXXXXXXXXXXX
    }
    return false;
  },

添加 touchstart.prevent,組織click事件。

點(diǎn)擊事件順序

點(diǎn)擊事件可以分解成多個(gè)事件

在移動(dòng)端,手指點(diǎn)擊一個(gè)元素,會(huì)經(jīng)過:touchstart --> touchmove -> touchend -->click

以上這篇vue中touch和click共存的解決方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue中的生命周期介紹

    Vue中的生命周期介紹

    這篇文章介紹了Vue中的生命周期,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Vue使用echarts可視化組件的方法

    Vue使用echarts可視化組件的方法

    這篇文章主要介紹了Vue使用echarts可視化組件的方法,本文通過實(shí)例代碼案例給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-07-07
  • Vue響應(yīng)式原理Observer、Dep、Watcher理解

    Vue響應(yīng)式原理Observer、Dep、Watcher理解

    這篇文章主要介紹了Vue響應(yīng)式原理-理解Observer、Dep、Watcher,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • vue實(shí)現(xiàn)pdf導(dǎo)出解決生成canvas模糊等問題(推薦)

    vue實(shí)現(xiàn)pdf導(dǎo)出解決生成canvas模糊等問題(推薦)

    最近公司項(xiàng)目需要,利用vue實(shí)現(xiàn)pdf導(dǎo)出,從而保存到本地打印出來,說起來好像也很容易,具體要怎么實(shí)現(xiàn)呢?下面小編給大家?guī)砹藇ue實(shí)現(xiàn)pdf導(dǎo)出解決生成canvas模糊等問題,需要的朋友參考下吧
    2018-10-10
  • vue spa應(yīng)用中的路由緩存問題與解決方案

    vue spa應(yīng)用中的路由緩存問題與解決方案

    這篇文章主要介紹了vue spa應(yīng)用中的路由緩存問題與解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue實(shí)現(xiàn)實(shí)時(shí)上傳文件進(jìn)度條

    vue實(shí)現(xiàn)實(shí)時(shí)上傳文件進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)實(shí)時(shí)上傳文件進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程

    利用vue + koa2 + mockjs模擬數(shù)據(jù)的方法教程

    這篇文章主要給大家介紹了關(guān)于利用vue + koa2 + mockjs模擬數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • vue+vux實(shí)現(xiàn)移動(dòng)端文件上傳樣式

    vue+vux實(shí)現(xiàn)移動(dòng)端文件上傳樣式

    這篇文章主要介紹了vue+vux實(shí)現(xiàn)移動(dòng)端文件上傳樣式,樣式使用的是vux的cell組件,需要的朋友可以參考下
    2017-07-07
  • 如何通過Vue3+Element?Plus自定義彈出框組件

    如何通過Vue3+Element?Plus自定義彈出框組件

    這篇文章主要給大家介紹了關(guān)于如何通過Vue3+Element?Plus自定義彈出框組件的相關(guān)資料,彈窗是前端開發(fā)中的一種常見需求,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-05-05
  • vue 移動(dòng)端記錄頁面瀏覽位置的方法

    vue 移動(dòng)端記錄頁面瀏覽位置的方法

    這篇文章主要介紹了vue 移動(dòng)端記錄頁面瀏覽位置的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論

抚顺县| 青川县| 隆昌县| 迁安市| 宜良县| 巴东县| 瓦房店市| 岳普湖县| 乐昌市| 康马县| 浮山县| 宁国市| 封开县| 界首市| 无为县| 高雄市| 平邑县| 天长市| 五大连池市| 克东县| 锡林浩特市| 永丰县| 文登市| 漳州市| 肃宁县| 华容县| 安义县| 鲁甸县| 特克斯县| 马鞍山市| 千阳县| 肃北| 拜城县| 嘉峪关市| 济源市| 洪洞县| 平湖市| 三江| 保靖县| 永康市| 黎川县|