一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - vue.js - Vue2.x-使用防抖以及節(jié)流的示例

Vue2.x-使用防抖以及節(jié)流的示例

2022-01-25 16:15Kyara vue.js

這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下

utils:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 防抖
export const debounce = (func, wait = 3000, immediate = true) => {
 let timeout = null;
 return function() {
  let context = this;
  let args = arguments;
  if (timeout) clearTimeout(timeout);
  if (immediate) {
   var callNow = !timeout; //點擊第一次為true 時間內(nèi)點擊第二次為false 時間結(jié)束則重復(fù)第一次
   timeout = setTimeout(() => {
    timeout = null;
   }, wait); //定時器ID
   if (callNow) func.apply(context, args);
  } else {
   timeout = setTimeout(function() {
    func.apply(context, args);
   }, wait);
  }
 };
};
// 時間戳方案
export const throttleTime = (fn, wait = 2000) => {
 var pre = Date.now();
 return function() {
  var context = this;
  var args = arguments;
  var now = Date.now();
  if (now - pre >= wait) {
   fn.apply(context, args);
   pre = Date.now();
  }
 };
};
// 定時器方案
export const throttleSetTimeout = (fn, wait = 3000) => {
 var timer = null;
 return function() {
  var context = this;
  var args = arguments;
  if (!timer) {
   timer = setTimeout(function() {
    fn.apply(context, args);
    timer = null;
   }, wait);
  }
 };
};

vue中使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<template>
 <div class="main">
  <p>防抖立即執(zhí)行</p>
  <button @click="click1">點擊</button>
 
  <br />
 
  <p>防抖不立即執(zhí)行</p>
  <button @click="click2">點擊</button>
 
  <br />
 
  <p>節(jié)流時間戳方案</p>
  <button @click="click3">點擊</button>
 
  <br />
 
  <p>節(jié)流定時器方案</p>
  <button @click="click4">點擊</button>
 </div>
</template>
 
<script>
import { debounce, throttleTime, throttleSetTimeout } from './utils';
export default {
 methods: {
  click1: debounce(
   function() {
    console.log('防抖立即執(zhí)行');
   },
   2000,
   true
  ),
  click2: debounce(
   function() {
    console.log('防抖不立即執(zhí)行');
   },
   2000,
   false
  ),
  click3: throttleTime(function() {
   console.log('節(jié)流時間戳方案');
  }),
  click4: throttleSetTimeout(function() {
   console.log('節(jié)流定時器方案');
  })
 },
};
</script>
 
<style scoped lang="scss">
* {
 margin: 0;
 font-size: 20px;
 user-select: none;
}
.main {
 position: absolute;
 left: 50%;
 transform: translateX(-50%);
 width: 500px;
}
button {
 margin-bottom: 100px;
}
</style>

解釋:

  防抖:

    立即執(zhí)行版本:immediate為true,則點擊第一次就執(zhí)行,再繼續(xù)點擊則不執(zhí)行,當(dāng)wait時間結(jié)束后,再點擊則生效,也就是只執(zhí)行第一次。

    原理:

      點擊第一次不存在timeoutID,并且callNow為true,則立即執(zhí)行目標(biāo)代碼,點擊第二次時存在了timeoutID,并且callNow為false,所以不執(zhí)行目標(biāo)代碼,當(dāng)wait時間結(jié)束后,把timeoutID設(shè)為null,則開始重復(fù)立即執(zhí)行邏輯。

    不立即執(zhí)行版:immediate為false,則點擊第一次不執(zhí)行,當(dāng)wait時間結(jié)束后,才生效,也就是無論點擊多少次,只執(zhí)行最后一次點擊事件

    原理:

      使用setTimeout延遲執(zhí)行事件,如果多次觸發(fā),則clearTimeout上次執(zhí)行的代碼,重新開始計時,在計時期間沒有觸發(fā)事件,則執(zhí)行目標(biāo)代碼。

  節(jié)流:

    連續(xù)觸發(fā)事件時以wait頻率執(zhí)行目標(biāo)代碼。

效果:

Vue2.x-使用防抖以及節(jié)流的示例

以上就是Vue2.x-使用防抖以及節(jié)流的示例的詳細內(nèi)容,更多關(guān)于vue 防抖及節(jié)流的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://www.cnblogs.com/jwyblogs/p/14454999.html

延伸 · 閱讀

精彩推薦
  • vue.jsVue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn)

    這篇文章主要介紹了Vue2.x 項目性能優(yōu)化之代碼優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術(shù)團隊7992021-12-22
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.js用vite搭建vue3應(yīng)用的實現(xiàn)方法

    用vite搭建vue3應(yīng)用的實現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue項目中實現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項目中實現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個手機端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
主站蜘蛛池模板: 久久久久久久久女黄 | 精品区2区3区4区产品乱码9 | 999久久免费高清热精品 | 欧美同志网址 | 91久久青青青国产免费 | 日本在线播放 | 日韩精品视频观看 | 亚洲国产第一区二区香蕉日日 | 韩国日本香港毛片免费 | 国产91青青成人a在线 | 99久久精品免费看国产 | xxx88视频在线观看 | 97久久精品午夜一区二区 | 国产美女在线一区二区三区 | 亚洲高清一区二区三区四区 | 日韩一级欧美一级一级国产 | 全日爱韩国视频在线观看 | 手机在线免费观看高清 | 美女扒开腿让男生捅 | 91国内精品线免费播放 | 久久亚洲精品专区蓝色区 | 亚洲邪恶天堂影院在线观看 | 欧美日韩国产亚洲一区二区三区 | 91精品国产综合久久福利 | 亚洲福利一区二区精品秒拍 | 日本小视频网站 | 99热久久这里只有精品6国产网 | 三年片韩国在线观看 | 国产激情久久久久影院小草 | 天天色综合久久 | 日本红色高清免费观看 | 男人的天堂视频在线 | 欧美日韩精品在线视频 | 免费永久观看美女视频网站网址 | 羞羞麻豆国产精品1区2区3区 | 国产婷婷成人久久av免费高清 | 满城尽带黄金甲大胸片 | 亚洲视频在线观看地址 | 欧美另类bbbxxxxx另类 | 亚洲欧美成人综合在线 | 五月色婷婷在线影院 |