首页 > 其他分享 >防抖 && 节流

防抖 && 节流

时间:2022-10-10 22:36:27浏览次数:58  
标签:function 触发 防抖 节流 && 执行 id

以下两重情况都是用于高频触发事件,根据不同场景选择合适的用法。对于有停顿的高频触发事件建议选择防抖,然而对于高频触发并且连续的事件,选择节流;

防抖:

防抖:

防止连续多次触发,n秒内连续触发则只触发最后一次。目的:只执行一次

原理:

触发之前判断是否已经触发,已经触发就取消执行上一次的事件,然后执行本次事件。

案例:

首先,一个全局变量 fn 接住了 debounce 的一个返回值,闭包形成, debounce 内部的 id 被保存住,因此,每次 fn 执行的时候,它所用到的 id 都是一个

防抖的原理是,如果用户频繁的点击按钮,上一次的 setTimeout 都会立刻被下一次清除,需要执行的函数始终打不出来,只有最后一次没人清除它,因此会被执行。

点击查看代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="./lib/jquery.js"></script>
	</head>
	<body>
	 <button id="btn1">btn1</button>
	</body>
	<script>
	   function debounce(){
	             let id;
	             return function(){
	                 clearTimeout(id);
	                 id = setTimeout(function(){
	                     console.log('button clicked',id)
	                 },5000);
	             }
	         }
	         var fn = debounce();
	         $("#btn1").on('click',function(e){
	             fn();
	         })
	</script>

</html>

:节流:

节流:

防止连续多次触发,n秒内连续多次触发则n秒内执行一次。目的:减少执行次数

原理:

触发之前判断是否已经触发,已经触发就取消当前本次执行事件,继续执行上一个事件。

案例

节流的原理是当函数被成功的执行过一次,本次成功执行的时间会被记录下来,那么当用户频繁点击按钮的时候,这些次记录的时间距离上次成功执行的时间太短,小于阈值,因此不被执行

点击查看代码
<body>
	 <button id="btn1">btn1</button>
	<script>
	 
			// 节流
     function abc() {
              let time = new Date();
              return function () {
                  let time1 = new Date();
                  if (time1 - time > 1000) {
                      console.log(time1 - time);
                      time = time1;
                  }
              }
          }
          let fn = abc();
          $("#btn1").on('click', function (e) {
              fn();
          })
	</script>
	</body>

标签:function,触发,防抖,节流,&&,执行,id
From: https://www.cnblogs.com/yxn001/p/16777655.html

相关文章

  • 【Java基础】字节流写数据加异常处理、字节流读数据、复制文本文件及复制图片
    目录​​一、字节流写数据加异常处理​​​​二、字节流读数据(一次读一个字节数据)​​​​三、字节流复制文本文件​​​​四、字节流读数据(一次读一个字节数组数据)​​......
  • 【Java基础】IO流概述分类、字节流写数据、字节流写数据的三种方式及写数据的两个小问
    目录​​一、IO流概述和分类​​​​二、字节流写数据​​​​三、字节流写数据的三种方式​​​​四、字节流写数据的两个小问题​​一、IO流概述和分类IO流介绍:●IO:输入/......
  • 前端性能优化之函数节流
    防抖节流分为防抖和节流,都是为了防止短时间内高频繁调用同一接口的方法。比如,短时间内重复点击提交同一个评论,异步操纵还未给出响应,多次调用接口,导致重复提交多个评论。......
  • Java_File&递归&字节流
    Java_File&递归&字节流1.File类1.1File类概述和构造方法【应用】File类介绍它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File......
  • java字节流输出的使用步骤
    字节流输出的使用步骤:创建一个FileOutPutStream对象,构造方法中传递写入数据的目的地。调用FileOutPutStream对象中的方法write,把数据写入到文件中。释放资源//......
  • 字节流输出的使用步骤:
    字节流输出的使用步骤:创建一个FileOutPutStream对象,构造方法中传递写入数据的目的地。调用FileOutPutStream对象中的方法write,把数据写入到文件中。释放资源//......
  • js:防抖动与节流
    针对一些会频繁触发的事件如scroll、resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能。因此针对这类事件要进行防抖动或者节流处理防......
  • React-Hooks怎样封装防抖和节流-面试真题
    Debouncedebounce原意消除抖动,对于事件触发频繁的场景,只有最后由程序控制的事件是有效的。防抖函数,我们需要做的是在一件事触发的时候设置一个定时器使事件延迟发生,在......
  • React-Hooks怎样封装防抖和节流-面试真题
    Debouncedebounce原意消除抖动,对于事件触发频繁的场景,只有最后由程序控制的事件是有效的。防抖函数,我们需要做的是在一件事触发的时候设置一个定时器使事件延迟发生,在......
  • Vue实现防抖
    data(){return{//用于保存防抖的定时器timeout:null,}}methods:{//防抖函数debounce(fn,delay){if(this.......