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

溫馨提示×

溫馨提示×

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

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

淺析Vue 防抖與節流的使用

發布時間:2020-10-08 05:05:09 來源:腳本之家 閱讀:189 作者:夜夕i 欄目:web開發

在一個電影項目中,我想在電影的列表中,保存下拉的當前位置,防止你切換頁面后,再切換回當前的電影列表頁,他就又回到電影的第一條數據。

這時候,我不想每次只要滑動一點,就保存當前位置,我想隔一段時間,保存一次,這時候,就可以使用防抖和節流。

概念

說白了, 防抖節流就是使用定時器 來實現我們的目的。

防抖(debounce):

在事件被觸發n秒后再執行回調,如果在這n秒內又被觸發,則重新計時。

典型的案例就是輸入框搜索:輸入結束后n秒才進行搜索請求,n秒內又輸入的內容,則重新計時。

節流(throttle):

規定在一個單位時間內,只能觸發一次函數,如果這個單位時間內觸發多次函數,只有一次生效。

典型的案例就是鼠標不斷點擊觸發,規定在n秒內多次點擊只生效一次。

用法

防抖(debounce)

下拉列表,隔一段時間保存當前下拉位置。

我們可以在 mounted 鉤子中實現我們的防抖:

// 防抖 定時器
let timer;
//list就是電影列表 ref="list" $el獲取DOM元素
this.$refs.list.$el.addEventListener("scroll", e => {
 console.log("---->",e.target.scrollTop) //不使用防抖
 if (timer) {
 //清空timer
 clearTimeout(timer);
 }
 timer = setTimeout(() => {
 console.log(e.target.scrollTop) //使用防抖
 
 //在sessionStorage中保存當前下拉位置
 // sessionStorage.setItem("position", e.target.scrollTop);
 }, 75); //75mm為最佳
});

效果演示(隔一段時間保存當前位置):

加 ----> 為不使用防抖,沒加的則使用防抖

輸入框搜索隔段時間進行搜索請求:

<template>
 <div>
  <input type="text" @keyup="debounce" />
 </div>
</template>

<script>
//定義 timer
let timer;
export default {
 methods: {
  debounce: function() {
   if (timer) {
    clearTimeout(timer);
   }
   timer = setTimeout(() => {
    console.log("防抖...");
    timer = undefined;
   }, 2000);
  }
 }
};
</script>

淺析Vue 防抖與節流的使用 

節流(throttle)

在n秒內點擊多次,只有一次生效。

<template>
 <div>
  <button @click="throttle">按鈕</button>
 </div>
</template>

<script>
//定義
let timer, lastTime;
export default {
 methods: {
  throttle: function() {
   let now = +new Date();
   if (lastTime && lastTime - now < 200) { //在200ms內點擊多次,只有一次生效
    clearTimeout(timer);
   }
   timer = setTimeout(() => {
    console.log("點擊...");
    lastTime = +new Date();
   }, 200);
  }
 }
};
</script>

效果演示:

淺析Vue 防抖與節流的使用 

補充

當然,也可以對這兩個方法進行封裝,以便在多處使用。

/**
 * 函數防抖 (只執行最后一次點擊)
 */
export const Debounce = (fn, t) => {
  let delay = t || 500;
  let timer;
  console.log(fn)
  console.log(typeof fn)
  return function () {
    let args = arguments;
    if(timer){
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      timer = null;
      fn.apply(this, args);
    }, delay);
  }
};
/*
 * 函數節流
 */
export const Throttle = (fn, t) => {
  let last;
  let timer;
  let interval = t || 500;
  return function () {
    let args = arguments;
    let now = +new Date();
    if (last && now - last < interval) {
      clearTimeout(timer);
      timer = setTimeout(() => {
        last = now;
        fn.apply(this, args);
      }, interval);
    } else {
      last = now;
      fn.apply(this, args);
    }
  }
};

總結

以上所述是小編給大家介紹的Vue 防抖與節流的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

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

AI

景谷| 新兴县| 景德镇市| 额尔古纳市| 永靖县| 阜新| 建宁县| 高阳县| 绵竹市| 镇远县| 夏津县| 米易县| 深州市| 临沭县| 平顶山市| 布拖县| 聂拉木县| 兴安盟| 法库县| 宁海县| 华安县| 镇江市| 遂平县| 开鲁县| 灯塔市| 海淀区| 自治县| 隆安县| 彭水| 红河县| 吉安市| 阳原县| 都匀市| 嘉定区| 重庆市| 茌平县| 绥德县| 翼城县| 漯河市| 塘沽区| 兴和县|