首页 > 其他分享 >防抖节流的含义使用场景及js实现原理

防抖节流的含义使用场景及js实现原理

时间:2022-10-26 17:22:38浏览次数:49  
标签:function 防抖 divEl 节流 js let func click

1.防抖:n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时。代码实现重在清零 clearTimeout。   应用:登录,提交,浏览器窗口的resizes事件,文本编辑保存

//防抖函数
    function debounce (f, wait) {
     //设置一个定时器
        let timer; 
        return (...args) => {   
     //单位时间内再次点击将把未来的发生的点击事件扼杀在摇篮之中,并重新计时,类似中断回城             
            clearTimeout(timer)             
            timer = setTimeout(() => {      
                f(...args)
            }, wait)
        }
    }
let count = 0;
let divEl = document.getElementById("submitBtn");
//真正执行的请求时间
function moveFn(){
   console.log('ajax请求:'+count++)
}
//divEl.addEventListener("click", moveFn,false)
divEl.addEventListener("click", debounce(moveFn, 3000));
  2.节流:n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效,响应平滑。   应用:scroll 事件,input的实时搜索
function throttle(func, wait) {
  // 记录上一次执行 func 的时间
    let prev = 0
    return function (...args) {
      // 当前触发的时间(时间戳)
        const now = Number(new Date())
      // 只有当当前时间超过上次点击单位时长后才去执行方法func,类似在公交车站等公交
        if (now >= prev + wait) {
        // 符合条件执行 func 时,需要更新 prev 时间
            prev = now
            func.apply(this, args)
        }
    }
}
divEl.addEventListener("click", throttle(moveFn, 1000));

 

3.通俗易懂的接地气的防止重复点击的写法

let canCLick = true
divEl.addEventListener("click",()=>{
    if(canCLick){
        canCLick = false
        console.log('提交')
        setTimeout(function(){
            canCLick = true
        },1000)
    }
});

标签:function,防抖,divEl,节流,js,let,func,click
From: https://www.cnblogs.com/yd15321/p/16829188.html

相关文章

  • 请谨慎选择JS加密工具站
    前言JS加密原本是一个造福于广大群主的产品,它可以很好的保护你的前端JS代码,为您的前端代码保驾护航,还可以保证您的接口参数签名计算代码不泄露出去,防止别有用心的人随意的去......
  • jsp项目运行过程中出现的问题:
    报错问题描述:/admin/insert.jsp(行.:[33],列:[7])根据标记文件中的TLD或attribute指令,attribute[items]不接受任何表达式   web.xml中版本号不兼容产生的问......
  • Flutter(九)Json序列化与反序列化(转Model)
    在日常开发中JSON的序列化与反序列化是一个常见的操作;而Dart语言不支持反射,运行时反射会影响Dart的treeshaking(摇树优化),treeshaking可以“抖掉”不需要使用的代码,显著......
  • JS中全局变量作为函数实参传入的问题
    昨天面试时,被问到了以下的JS代码问题,对比两种情况的输出思考为什么会是这样的结果第一种情况vara=[1,2,3];functionfoo(a){a=[4,5,6];}foo(a);console.log(a)......
  • [JS真好玩] 图片文件没后缀,怎么判断图片类型?
    这是我的专栏​​《JS真好玩》​​,将教你用JS实现一些有趣的东西。JS可以直接在浏览器运行,也可以在Node中运行,你可以跟我学习用JS做好玩儿的事情。感谢大家关注~文章求赞噢!祝......
  • Nodejs相关ORM框架分析
    概述写这篇blog的原因,想找个node的ORM框架用用,确很难找到一篇对比分析这些ORM框架的文章,唯一找到了一篇,居然是通过star数来论英雄,我觉着很难服众,于是就找几个看看。后来又......
  • 在linux系统中安装Nodejs 的简单步骤说明
    一、首先我们要下载Nodejs安装包 1、可以从官网上https://nodejs.org/zh-cn/download/ ,下载合适自己的安装包。大家可以根据自己的服务器下载不同的安装包,通过uname......
  • Nodejs:ESModule和commonjs,傻傻分不清
    最近写nodejs脚本的时候遇到了commonjs和ESModule的问题,正好之前用得稀里糊涂的,这次好好学习一下。ESModule导出仅导出namedexports:命名导出,每次可以导出一个或......
  • js 加减乘除取余运算
    1.取整//丢弃小数部分,保留整数部分parseInt(5/2)//22.向上取整//向上取整,有小数就整数部分加1Math.ceil(5/2)//33.向下取整//向下取整,丢弃小数部分......
  • [RxJS] merge - build count down example
    import{interval,fromEvent,of,merge,empty}from'rxjs';import{scan,mapTo,takeWhile,takeUntil,tap,startWith,switchMap}from'rxjs/operators';/......