zoukankan      html  css  js  c++  java
  • 封装防抖方法

    • 函数防抖(debounce),就是指触发事件后,在 n 秒内函数只能执行一次,如果触发事件后在 n 秒内又触发了事件,则会重新计算函数延执行时间

    函数防抖的要点,是需要一个 setTimeout 来辅助实现,延迟运行需要执行的代码。如果方法多次触发,则把上次记录的延迟执行代码用 clearTimeout 清掉,重新开始计时。若计时期间事件没有被重新触发,等延迟时间计时完毕,则执行目标代码。

     1         // 封装一个防抖方法对业务逻辑函数进行防抖包装并设置防抖时间。
     2         function debounce(fn, delay) {
     3             let i = null
     4             console.log(this);
     5             return function () {
     6                 //用if做个判断以便清除之前触发的事件,保留最后一次事件
     7                 if (i !== null) {
     8                     clearTimeout(i);
     9                 }
    10                 i = setTimeout(() => {
    11                     fn.call(this)  //必须通过call改变this指向input元素,否则绑定的是window
    12                 }, delay);
    13             }
    14         }
    15 
    16         // 输入框的防抖处理
    17         let input = document.querySelector('input')
    18         function f1(){
    19             console.log(this.value);
    20         }
    21         input.oninput = debounce(f1,500)
    • 节流就是每隔n的时间调用一次函数,而不是一触发事件就调用一次,这样就会减少资源浪费

      

     1         let input = document.querySelector('input')
     2         let f1 = function () {
     3             console.log(this.value);
     4         }
     5         input.oninput = throttle(f1, 1000)
     6 
     7         function throttle(fn, delay) {
     8             let flag = true
     9             return function () {
    10                 if (flag) {
    11                     flag = false
    12                     setTimeout(() => {
    13                         fn.call(this)
    14                         flag = true
    15                     }, delay);
    16                 }
    17             }
    18         }
    俩者区别: 函数节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数。 比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次 Ajax 请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。



  • 相关阅读:
    HDU 2116 Has the sum exceeded
    HDU 1233 还是畅通工程
    HDU 1234 开门人和关门人
    HDU 1283 最简单的计算机
    HDU 2552 三足鼎立
    HDU 1202 The calculation of GPA
    HDU 1248 寒冰王座
    HDU 1863 畅通工程
    HDU 1879 继续畅通工程
    颜色对话框CColorDialog,字体对话框CFontDialog使用实例
  • 原文地址:https://www.cnblogs.com/zxf906/p/15269383.html
Copyright © 2011-2022 走看看