国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2.x通過指令實(shí)現(xiàn)v-debounce和v-throttle防抖節(jié)流的實(shí)現(xiàn),親測可用。

這篇具有很好參考價(jià)值的文章主要介紹了vue2.x通過指令實(shí)現(xiàn)v-debounce和v-throttle防抖節(jié)流的實(shí)現(xiàn),親測可用。。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在vue2.x中,防抖和節(jié)流一般是通過引入防抖函數(shù)debounce和節(jié)流函數(shù)throtte,對(duì)事件回調(diào)進(jìn)行一層包裹,然后在模板中綁定包裹后的事件回調(diào),這樣每個(gè)需要用的地方都需要進(jìn)行防抖,節(jié)流函數(shù)的導(dǎo)入,事件回調(diào)的包裹,比較麻煩。通過摸索,有以下兩種方法。

重寫Vue.protyoep.$on方法

通過重寫Vue.prototype.$on方法,統(tǒng)一對(duì)xx事件進(jìn)行防抖和節(jié)流,(沒試過,應(yīng)該可行)

vue2.x通過指令實(shí)現(xiàn)v-debounce和v-throttle防抖節(jié)流的實(shí)現(xiàn),親測可用。,Vue,vue.js,javascript,ecmascript
偽代碼如下:

const oldOn = Vue.prototype.$on
Vue.prototype.$on = function(...args){
	const event = args[0]
	let fn = args[1]
	if(某某條件){
		fn = debounce(fn)
		// fn = throttle(fn)
	}
	oldOn.call(this,fn)
}

通過指令包裹vnode的存放回調(diào)

使用方法,只需要在組件或者dom元素上對(duì)需要防抖或者節(jié)流的事件添加以下指令即可
v-debounce:事件.毫秒數(shù)

<input @click="fn" v-debounce:click.300 v-debounce:change.300 />

實(shí)現(xiàn)細(xì)節(jié)文章來源地址http://www.zghlxwxcb.cn/news/detail-621099.html

/**
 * 防抖函數(shù)
 * @param {*} fn
 * @param {*} wait 防抖間隔
 * @param {*} immediate 立即執(zhí)行
 * @returns
 */
function debounce(fn, wait = 300, immediate = true) {
  let t = null
  let canChangeImmdiate = !!immediate
  if (typeof fn !== "function") {
    throw new TypeError("debounce 第一個(gè)參數(shù)必須是函數(shù)")
  }

  return function debounceFn(...args) {
    t && clearTimeout(t)
    if (immediate) {
      if (!t) {
        fn.apply(this, args)
        immediate = false
      }
    } else {
      t = setTimeout(() => {
        fn.apply(this, args)
        if (canChangeImmdiate) {
          immediate = true
          t = null
        }
      }, wait)
    }
  }
}

// 直接添加在組件或者元素上 v-debounce:click.300 v-debounce:change.300 300ms
// vue2.6.x在update中,vue2.7.x在insertd鉤子中起作用
Vue.directive("debounce", {
  update(el, bind, vnode) {
    // 默認(rèn)給click事件添加防抖
    const { value: fn, arg = "click", modifiers } = bind
    const { immediate = false } = modifiers
    const modNumKeys = Object.keys(modifiers).filter((key) => !isNaN(+key))
    const wait = modNumKeys.length > 0 ? modNumKeys[0] : 300

    if (vnode.componentInstance) {
      // 組件
      for (const [evtName, handlers] of Object.entries(vnode.componentInstance._events)) {
        if (arg == evtName) {
          vnode.componentInstance._events[evtName] = handlers.map((handler) =>
            debounce(handler, wait, immediate)
          )
        }
      }
    } else {
      // dom元素
      for (const [evtName, handler] of Object.entries(vnode.data.on)) {
        if (evtName == arg) {
          if (Array.isArray(vnode.data.on[arg].fns)) {
            vnode.data.on[arg].fns = vnode.data.on[arg].fns.map((fn) =>
              debounce(fn, wait, immediate)
            )
          } else {
            console.log(wait, immediate)
            vnode.data.on[arg].fns = debounce(vnode.data.on[arg].fns, wait, immediate)
          }
        }
      }
    }
  }
})

到了這里,關(guān)于vue2.x通過指令實(shí)現(xiàn)v-debounce和v-throttle防抖節(jié)流的實(shí)現(xiàn),親測可用。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue2 自定義指令,插槽

    vue2 自定義指令,插槽

    1.自定義指令 基本語法(全局、局部注冊(cè)) 指令的值 v-loading的指令封裝 2.插槽 默認(rèn)插槽 具名插槽 作用域插槽 1.指令介紹 內(nèi)置指令: v-html、v-if、v-bind、v-on … 這都是Vue給咱們內(nèi)置的一些指令,可以直接使用 自定義指令:同時(shí)Vue也支持讓開發(fā)者,自己注冊(cè)一些指令。這些指

    2024年02月11日
    瀏覽(22)
  • 前端學(xué)習(xí)--vue2--2--vue指令基礎(chǔ)

    前端學(xué)習(xí)--vue2--2--vue指令基礎(chǔ)

    寫在前面: 前置內(nèi)容 - vue配置 vue指令只的是帶有v-前綴的特殊標(biāo)簽屬性 插值表達(dá)式{{}}是一種vue模板語法。 利用表達(dá)式進(jìn)行差值,渲染到頁面。 表達(dá)式可以是被求值的代碼,js會(huì)計(jì)算 不能用差值表達(dá)式的 不存在的數(shù)據(jù) {{data里面不存在的字段 js {{if}} 標(biāo)簽屬性 span id=“

    2024年02月14日
    瀏覽(28)
  • 前端學(xué)習(xí)---vue2--指令修飾符詳解

    前端學(xué)習(xí)---vue2--指令修飾符詳解

    寫在前面: 前端感覺系統(tǒng)學(xué)起來還行,我也不曉得我是咋快速入門1個(gè)月就開始看實(shí)習(xí)公司代碼的。然后現(xiàn)在開始系統(tǒng)復(fù)習(xí),然后感覺有的封裝的還可以,不過就是我不曉得,像這個(gè)指令修飾符,其實(shí)說邏輯難寫,倒是也沒有,就是簡單不用自己寫. 就像后端判斷字符串是否為

    2024年02月14日
    瀏覽(26)
  • Vue2-收集表單數(shù)據(jù)、過濾器、內(nèi)置指令與自定義指令、Vue生命周期

    Vue2-收集表單數(shù)據(jù)、過濾器、內(nèi)置指令與自定義指令、Vue生命周期

    ??:我徒越萬重山 千帆過 萬木自逢春 更多Vue知識(shí)請(qǐng)點(diǎn)擊——Vue.js 1、不同標(biāo)簽的value屬性 若: input type=\\\"text\\\"/ 普通輸入框,則v-model收集的是value值,用戶輸入的就是value值。 若: input type=\\\"radio\\\"/ 單選框,則v-model收集的是value值,且要給標(biāo)簽配置value值。 若: input type=\\\"checkb

    2024年02月13日
    瀏覽(55)
  • 【vue2第十三章】自定義指令 自定義v-loading指令

    【vue2第十三章】自定義指令 自定義v-loading指令

    像 v-html,v-if,v-for都是vue內(nèi)置指令,而我們也可以封裝自定義指令,提升編碼效率。 什么是自定義指令? 自己定義的一些指令,可以進(jìn)行一些dom操作,擴(kuò)展格外的功能。比如讓圖片懶加載,讓input自動(dòng)聚焦。 自定義指令又分為全局注冊(cè)和局部注冊(cè)。 使用方法則是與內(nèi)置指令

    2024年02月09日
    瀏覽(27)
  • vue自定義指令v-loading(vue2和vue3)

    vue自定義指令v-loading(vue2和vue3)

    ? 1. 目錄結(jié)構(gòu): 2. 代碼實(shí)現(xiàn)? /directives/loading/loading.vue ? ?loading效果頁面(此處使用的antd下面的組件,可自定義) /directives/loading/loading.js (實(shí)現(xiàn)loading組件的插入及銷毀) /directives/loading/index.js (loading指令的注冊(cè)) 3. 全局引入(main.js文件) 4. 使用 1. 目錄結(jié)構(gòu) 2. 代碼實(shí)現(xiàn)

    2023年04月23日
    瀏覽(32)
  • vue2--1. 內(nèi)容渲染指令 2. 屬性綁定指令 3. 事件綁定 4. v-model 指令 5. 條件渲染指令

    2. 屬性綁定指令 3. 事件綁定 4. v-model 指令 5. 條件渲染指令) List item 推薦大家安裝的 VScode 中的 Vue 插件 Vue 3 Snippets https://marketplace.visualstudio.com/items?itemName=hollowtree.vue-snippets Vetur https://marketplace.visualstudio.com/items?itemName=octref.vetur 什么是 vue 構(gòu)建用戶界面 用 vue 往 html 頁面中填充

    2024年02月05日
    瀏覽(52)
  • 前端開發(fā)攻略---Vue通過自定義指令實(shí)現(xiàn)元素平滑上升的動(dòng)畫效果(可以自定義動(dòng)畫時(shí)間、動(dòng)畫效果、動(dòng)畫速度等等)。

    前端開發(fā)攻略---Vue通過自定義指令實(shí)現(xiàn)元素平滑上升的動(dòng)畫效果(可以自定義動(dòng)畫時(shí)間、動(dòng)畫效果、動(dòng)畫速度等等)。

    這個(gè)指令不是原生自帶的,需要手動(dòng)去書寫,但是這輩子只需要編寫這一次就好了,后邊可以反復(fù)利用。 IntersectionObserver 是一個(gè)用于監(jiān)測元素是否進(jìn)入或離開視口(viewport)的 API。它可以幫助你在頁面滾動(dòng)時(shí)或者元素位置改變時(shí)進(jìn)行回調(diào)操作,這樣你就可以根據(jù)元素是否可見

    2024年04月11日
    瀏覽(25)
  • Vue2技能樹(3)-聲明式渲染、指令大全、生命周期函數(shù)

    ?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力! ?? 收藏,你的青睞是我努力的方向! ?? 評(píng)論,你的意見是我進(jìn)步的財(cái)富! Vue2技能樹(1)-介紹、導(dǎo)入使用、響應(yīng)式數(shù)據(jù)綁定、組件化開發(fā) vue2技能樹(2)-模板語法、vue的工具鏈、漸進(jìn)式框架 Vue2技能樹(3)-聲明式渲染、指令大全、生命周

    2024年02月07日
    瀏覽(27)
  • vue去掉所有輸入框兩邊空格,封裝指令去空格,支持Vue2和Vue3,ElementUI Input去空格

    vue去掉所有輸入框兩邊空格,封裝指令去空格,支持Vue2和Vue3,ElementUI Input去空格

    就是頁面很多表單輸入框,期望在提交的時(shí)候,都要把用戶兩邊的空格去掉 ?使用 vue 的指令 .trim 去掉空格 中間會(huì)輸入不了空格, 比如我想輸入 你好啊 中國 , 這中間的空格輸入不了,只能變成 你好啊中國 ?在提交的時(shí)候使用 trim() 方法去兩邊空格 需要一個(gè)個(gè)字段的添加,

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包