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

vue3+TS 實現(xiàn)自定義指令長按觸發(fā)綁定的函數(shù)

 更新時間:2022年12月29日 16:07:50   作者:bbigger004  
這篇文章主要介紹了vue3+TS實現(xiàn)自定義指令長按觸發(fā)綁定的函數(shù),文中給大家分享了編寫自定義指令時遇到的幾個難點,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下

而然間看到一個在vue2中寫的長按觸發(fā)事件的自定義指定,想著能不能把他copy到我的vue3項目中呢。

編寫自定義指令時遇到的幾個難點

1.自定義指令的類型

在ts中寫任何東西都要考慮到類型的問題,自定義指令的類型問題依然存在

2.在ts中使用setTimeout() 函數(shù)

setTimeout()函數(shù)的默認(rèn)返回值是一個隨機的number ,這個number 代表了這個計時器的唯一id,但是并不能直接將其類型定義為number 否則會出現(xiàn)報錯。

3.自定義指令的傳參問題

我這里的傳參方法只做參考,寫的很不規(guī)范。具體的好多傳參的方法請自行搜索

代碼

這個是我自己編寫的長按觸發(fā)綁定的函數(shù)
directives/longPress.ts

import { ObjectDirective } from 'vue'

const LongPress: ObjectDirective = {
  // 組件mounted時執(zhí)行指令
  mounted(el, binding, vNode) {
    // 確保提供的表達(dá)式是函數(shù)
    if (typeof binding.value !== 'function') {
      // // 將警告?zhèn)鬟f給控制臺
      let warn = `[longpress:] provided expression '${binding.value}' is not afunction, but has to be `
      console.log(warn)
    } else {
      console.table({ el, binding, vNode })
      let timer: ReturnType<typeof setTimeout> | null = null  //定義空 定時器
      const start = (e: MouseEvent | TouchEvent) => {
        console.log(e)
        //下列事件不執(zhí)行1.不是鼠標(biāo)左鍵2.單擊事件  (3.沒有傳入長按時間 ?? 有默認(rèn))
        if ((<MouseEvent>e).button !== 0 && e.type === 'click') {
          return
        }
        if (timer == null) {
          timer = setTimeout(() => {
            handler()
          }, Number(binding.arg) * 1000 ?? 0.5 * 10000) //默認(rèn)長按0.5秒執(zhí)行綁定的函數(shù)
        }
      }
      const cancel = () => {
        if (timer !== null) {
          clearTimeout(timer)
          console.log(timer);//定時器默認(rèn)返回一個隨機的number 這個number的值是這個定時器的id
          timer = null
        }
      }
      const handler = () => {
        binding.value()
      }
      // 添加事件監(jiān)聽器
      el.addEventListener('mousedown', start)
      el.addEventListener('touchstart', start)
      // 取消計時器
      el.addEventListener('click', cancel)
      el.addEventListener('mouseout', cancel)
      el.addEventListener('touchend', cancel)
      el.addEventListener('touchcancel', cancel)
    }
  },
}

export default LongPress

在main.ts中引入 作為全局自定義指令

import { createApp } from 'vue'
import App from './App.vue'
import LongPress from './directives/longpress'

const app = createApp(App)
app.directive('longPress',LongPress)
app.mount('#app')

在組件中使用
這里的v-longPress 便是自定義指令,其中此處的參數(shù)傳遞方法僅供參考

<template>
  <div>
    <button v-longPress = 'longFunc,1' >longPress</button>
  </div>
</template>

<script setup lang="ts">
const longFunc = () => {
  console.log('click long btn');
  alert('click long btn')
}
</script>

<style scoped>

</style>

到此這篇關(guān)于vue3+TS 自定義指令:長按觸發(fā)綁定的函數(shù)的文章就介紹到這了,更多相關(guān)vue3 ts自定義指令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue自定義指令合集(超實用!)

    vue自定義指令合集(超實用!)

    Vue自定義指令是Vue中一種非常有用的擴展能力,它允許你在標(biāo)準(zhǔn)的模板語法中使用自定義行為,而不需要編寫新的組件或者混入,這篇文章主要給大家介紹了關(guān)于vue自定義指令的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Vue.js 60分鐘輕松入門

    Vue.js 60分鐘輕松入門

    Vue.js提供了簡潔、易于理解的API,幫助大家快速靈活掌握Vue.js。這篇文章主要介紹了如何在60分鐘內(nèi)輕松學(xué)習(xí)Vue.js,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Vue中watch監(jiān)聽首次不生效的解決辦法

    Vue中watch監(jiān)聽首次不生效的解決辦法

    在 Vue 中,watch 屬性用于觀察和響應(yīng) Vue 實例上數(shù)據(jù)的變動,然而,默認(rèn)情況下,watch 確實不會觸發(fā)組件創(chuàng)建時的變動,這里有幾種方式可以處理或繞過這個問題,需要的朋友可以參考下
    2024-09-09
  • ElementUI多個子組件表單的校驗管理實現(xiàn)

    ElementUI多個子組件表單的校驗管理實現(xiàn)

    這篇文章主要介紹了ElementUI多個子組件表單實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue.js利用defineProperty實現(xiàn)數(shù)據(jù)的雙向綁定

    vue.js利用defineProperty實現(xiàn)數(shù)據(jù)的雙向綁定

    本篇文章主要介紹了用Node.js當(dāng)作后臺、jQuery寫前臺AJAX代碼實現(xiàn)用戶登錄和注冊的功能的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Vue.js實現(xiàn)分頁查詢功能

    Vue.js實現(xiàn)分頁查詢功能

    這篇文章主要為大家詳細(xì)介紹了Vue.js實現(xiàn)分頁查詢功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue中使用vue-pdf嵌入和展示PDF文件

    Vue中使用vue-pdf嵌入和展示PDF文件

    在vue中實現(xiàn)在線預(yù)覽PDF文件我們可以使用vue-pdf來實現(xiàn),下面這篇文章主要介紹了Vue中使用vue-pdf嵌入和展示PDF文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題

    VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題

    這篇文章主要介紹了VUE父組件異步獲取數(shù)據(jù),子組件接收的值為空的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • nuxtjs中如何對axios二次封裝

    nuxtjs中如何對axios二次封裝

    這篇文章主要介紹了nuxtjs中如何對axios二次封裝問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue中mixins的使用方法詳解

    Vue中mixins的使用方法詳解

    mixins是一種分發(fā) Vue 組件中可復(fù)用功能的使用方式,它是一個 js 對象,包含我們組件script中的任意功能選項,下面就跟隨小編一起來看看它的具體使用吧
    2024-03-03

最新評論

宕昌县| 东乡| 广丰县| 筠连县| 枣阳市| 阿尔山市| 莱西市| 上思县| 通城县| 克拉玛依市| 南召县| 文水县| 纳雍县| 山东省| 日土县| 桦南县| 吴忠市| 宁武县| 革吉县| 乌审旗| 旺苍县| 奇台县| 莒南县| 日喀则市| 元氏县| 老河口市| 和田市| 黔江区| 蓝田县| 上虞市| 交口县| 太原市| 囊谦县| 务川| 玉门市| 玉田县| 万宁市| 孝感市| 大丰市| 闽侯县| 肃北|