防抖和节流简单代码

news/2024/7/19 15:44:28 标签: js

截留防抖的出现是为了解决用户平凡操作导致的资源加载的一个性能过度消耗问题

防抖

所谓防抖就是在事件触发后通过定时器在规定时间后去执行代码,期间如果继续触发事件定时器将会进行重置,例如浏览器搜索,当你停止输入一定时间后比如0.5s浏览器会自动搜索。

// 思路:在规定时间内未触发第二次,则执行
function debounce (func, delay) {
  // 利用闭包保存定时器
  let timer;
  return function () {
    let context = this;
    let arg = arguments;
    // 在规定时间内再次触发会先清除定时器后再重设定时器
	clearTimeout(timer)
    timer = setTimeout(function () {
      func.apply(context, arg)
	}, delay)
  }
}

节流

所谓节流,就是指连续触发事件但是在 n秒 中只执行一次函数,常见例子页面滚动、窗口调整大小和登录表单的发送。
有两种方法 一种是 时间戳 另一种是 定时器

时间戳版

 function throttle(func, limit) {
            let prea = 0;
            return function () {
                const args = arguments;
                const context = this;
                const timer = Date.now();//获取当前时间
                //时间差不能小于规定时间
                if (timer - prea >= limit) {
                	func.apply(context,args);
                	prea = timer
                }
            };
        }

定时器版

 function throttle(func, limit) {
            let timeSwitch = true; // 开关
            return function () {
                const args = arguments;
                const context = this;
                //开关只有在打开状态下才能执行代码
                if (timeSwitch) {
                    func.apply(context, args);
                    timeSwitch = false;
                    setTimeout(() => {
                        // 定时器用来进行保证在一定时间内开关的状态
                        timeSwitch = true;
                    }, limit);
                }
            };
        }

http://www.niftyadmin.cn/n/1834208.html

相关文章

带外设引脚选择(PPS)的I/O端口

12.1 简介通用 I/O引脚可被认为是最简单的外设。它们使 PIC MCU可以监视和控制其他器件。为了提高器件的灵活性和功能性,一些引脚与备用功能复用。这些功能取决于不同器件上的外设功能部件。一般来说,当外设被使能时,其对应的引脚就不能被用作…

杭电2061WA

#include<stdio.h> struct mem {char s[50];int c;int f; }; int main() {struct mem x[60];int n;int num,i;//num为课程数量scanf("%d",&n);while(n--){double sum10,sum20,gpa;scanf("%d",&num);for(i0;i<num;i){scanf("%s"…

js提取字符串中出现次数最多的字符

逻辑很简单首先计算出字符串中每个字符出现的次数并记录在一个对象中&#xff0c;定义一个最大数将出现最多的次数赋值给他&#xff0c;然后在对象中提取出属性值对应最大数的属性该属性为出现最多次的字符。 var str abcabcabdd;function foo(data) {var max 0;//定义最大数…

vue轮播图代码 仿小米商城轮播图

自己写的代码&#xff0c;仿小米商城轮播图&#xff0c;下面是整个代码&#xff0c;可以直接在首页注册组件使用&#xff0c;样式我使用了sass 结构代码 <template><div class"box"><div class"minbox" :style"width:${width}px;hei…

django 分页

HTML代码 <div id"upload_div3"> <div style"height: 350px;width: 100%;"> <table id"tab" class"table table-bordered "> <thead> <tr> <th><input id"inputname" class"in…

微信小程序使用阿里矢量图自定义icon

在微信小程序中使用icon 1.在阿里矢量图官网选好图标加入我的项目&#xff0c;在项目中点击Font class和查看在线链接&#xff0c; 2.然后会生成链接地址&#xff0c;点击进入 3.复制代码 4.在微信开发者工具中创建样式文件将代码复制进去&#xff0c;将.iconfont 更改成 [cl…

巴尔的摩古老的圣保罗教堂上的一首诗

你要对自己诚实尤其不要无情装有情对爱情不要玩世不恭在这干旱,没有希望的土地上它是一片四季常青的绿洲.你要吸取流水年华的经验从容地向青春时光告别你要培养自己的精神力量以抗衡突如其来的不幸的打击但你千万不要用想象使自己苦恼,忧伤有很多恐惧产生于疲劳和孤独除去有益于…

DLUTOJ1216

题目大意是&#xff1a;给出 $N$ 个正整数&#xff0c;其中至多有一个数只出现一次&#xff0c;其余的数都出现了两次。判断是否有某个数只出现一次&#xff0c;若有输出这个数&#xff0c;否则输出“-1”。 $1\le N\le 5000000$ 这道题的正解是用位运算中的异或 XOR &#xff…