美文网首页
javaScript 防抖函数

javaScript 防抖函数

作者: Rui哥 | 来源:发表于2019-10-31 10:21 被阅读0次

一. 防抖函数的定义与使用

防抖函数的定义

function debounce(fn, interval = 300) {
  let timeout = 0;     // timeout占位
  
  return () => {    // 返回闭包函数 timeout保留作用域
    console.log('=====清除==========');
    clearTimeout(timeout);  // 先清除上一个timeout
    timeout = setTimeout(() => {    //重新给timeout赋值,interval时间之后执行cb
      fn.apply(this, arguments);
    }, interval);
  };
}

防抖函数的调用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

  <button>点击测试防抖</button>

</body>
<script src="index.js"></script>
<script>

  var index = 0;
  var btn = document.querySelector('button');
  btn.onclick = debounce(function () {
    console.log(index++);
  },500)

</script>
</html>

二. 防抖函数应用场景

其实在HTML 和javaScript 中防抖函数其实有很多的应用场景:

  • 监控页面 img 标签的加载情况, 当img标签的图片下载完成后(即: load后) 对页面进行刷新, 如果html 页面中的每个img标签加载完成图片后就刷新页面, 那么频繁的刷新对性能和用户体验都不是很好, 这时可以使用防抖函数, 防止连续的刷新.

  • HTML 中某个按钮, 防止频繁的点击操作, 可以使用防抖函数.

  • HTML 页面中的上拉/ 下拉刷新可以使用防抖函数

三. 防抖函数使用注意事项:

  1. 防抖函数在使用时, 必须要使用变量引用保住他的命, 否则防抖函数,延迟时间结束后, 防抖函数不会触发对应函数的调用
  • 正确做法1:
<script>

  var index = 0;
  var btn = document.querySelector('button');
 // 使用btn DOM标签持有防抖函数,保住它的命
  btn.onclick = debounce(function () {
    console.log(index++);
  },500)

</script>
  • 错误的做法
<script>

  var index = 0;
  var btn = document.querySelector('button');
 // 使用btn DOM标签持有防抖函数,保住它的命
  btn.onclick = function(){
    // 函数一调用, 防抖函数的命就没了
    debounce(function () {
      console.log(index++);
    },500)
}

</script>
  • 正确做饭2

<script>
 var index2 = 0;
  // 持有防抖函数(保住它的命)
  let  bounceFunc =  debounce(function () {
    console.log(index2++);
  },500)

  
  var btn2 = document.querySelector('.btn2');
  // 在适当的时候调用防抖函数做事即可
  btn2.onclick =  function () {
    bounce2()
  } 
</script>

四. 总结防抖函数的使用,就2步:

  1. 实例化防抖函数, 并持有防抖函数(说清楚防抖函数做什么, 延时时间是多长 )
  2. 调用/触发防抖函数防抖
<script>
 var index2 = 0;
  // 1.实例化防抖函数, 并持有防抖函数
  let  mybounce=  debounce(function () {
    console.log(index2++);
  },500)

  
  var btn2 = document.querySelector('.btn2');
  // 在适当的时候调用防抖函数做事即可
  function refresh(){
    mybounce();
  } 
</script>

相关文章

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • JS笔试题

    JavaScript 笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发 n 秒后再执行回调,...

  • 分享:22道JavaScript高频手写面试题

    JavaScript笔试部分 实现防抖函数(debounce) 防抖函数原理:在事件被触发n秒后再执行回调,如果在...

  • 函数防抖与函数节流

    debounce -- 函数防抖,throttle -- 函数节流都是在JavaScript中可以限制函数发生频率...

  • 函数防抖和函数节流

    函数防抖和函数节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScr...

  • 彻底弄懂函数防抖和函数节流

    函数防抖和节流 函数防抖和函数节流:是优化高频率执行的JavaScript代码的一种手段。常用于JavaScrip...

  • javaScript 防抖函数

    一. 防抖函数的定义与使用 防抖函数的定义 防抖函数的调用 二. 防抖函数应用场景 其实在HTML 和javaSc...

  • JavaScript函数防抖

    一、前言 一如寄往的没有原因,没有前言,就是想整理一篇《函数防抖》和《函数节流》的相关知识,当然在工作和面试中遇到...

  • JavaScript-函数节流

    在上一篇文章 JavaScript-函数防抖 中我们学习了什么是防抖,并且一步步实现了防抖函数,今天我们一起来学习...

  • 前端战五渣学JavaScript——防抖、节流和rAF

    看了《JavaScript高级程序设计》和网上的一些博客,感觉对函数节流和函数防抖的概念是反的,以下我写的关于防抖...

网友评论

      本文标题:javaScript 防抖函数

      本文链接:https://www.haomeiwen.com/subject/kndwvctx.html