中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Vue2.x項目中使用防抖和節流功能

發布時間:2021-03-03 15:52:17 來源:億速云 閱讀:394 作者:Leah 欄目:開發技術

本篇文章為大家展示了如何在Vue2.x項目中使用防抖和節流功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

vue是什么軟件

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。

utils:

// 防抖
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 時間內點擊第二次為false 時間結束則重復第一次
   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中使用:

<template>
 <div class="main">
  <p>防抖立即執行</p>
  <button @click="click1">點擊</button>

  <br />

  <p>防抖不立即執行</p>
  <button @click="click2">點擊</button>

  <br />

  <p>節流時間戳方案</p>
  <button @click="click3">點擊</button>

  <br />

  <p>節流定時器方案</p>
  <button @click="click4">點擊</button>
 </div>
</template>

<script>
import { debounce, throttleTime, throttleSetTimeout } from './utils';
export default {
 methods: {
  click1: debounce(
   function() {
    console.log('防抖立即執行');
   },
   2000,
   true
  ),
  click2: debounce(
   function() {
    console.log('防抖不立即執行');
   },
   2000,
   false
  ),
  click3: throttleTime(function() {
   console.log('節流時間戳方案');
  }),
  click4: throttleSetTimeout(function() {
   console.log('節流定時器方案');
  })
 },
};
</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>

解釋:

  防抖:

    立即執行版本:immediate為true,則點擊第一次就執行,再繼續點擊則不執行,當wait時間結束后,再點擊則生效,也就是只執行第一次。

    原理:

      點擊第一次不存在timeoutID,并且callNow為true,則立即執行目標代碼,點擊第二次時存在了timeoutID,并且callNow為false,所以不執行目標代碼,當wait時間結束后,把timeoutID設為null,則開始重復立即執行邏輯。

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

    原理:

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

  節流:

    連續觸發事件時以wait頻率執行目標代碼。

上述內容就是如何在Vue2.x項目中使用防抖和節流功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

木兰县| 沐川县| 泾阳县| 贵州省| 拉萨市| 乐昌市| 扶沟县| 凤城市| 天柱县| 遂昌县| 揭东县| 汽车| 建瓯市| 韩城市| 肥西县| 普格县| 铜陵市| 平舆县| 石泉县| 昌吉市| 芜湖市| 东港市| 石台县| 云和县| 高密市| 沙田区| 萨迦县| 雷州市| 益阳市| 仙游县| 神池县| 新和县| 拜城县| 珠海市| 晋州市| 滨州市| 涿鹿县| 衡南县| SHOW| 鄄城县| 三台县|