防抖和节流

一次点击触发一次事件,当用户频繁点击按钮也会频繁触发事件,但是这里大部分触发都是没有意义的,为了解决这个问题,就需要防抖

防抖:任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。

// 防抖函数,返回一个函数
  function debounce(fn) {
    // 用来标记本次点击的计时器
    let timeout = null;
    return function () {
      // 每次点击会结束上一次的计时器
      clearTimeout(timeout);
      // 创建新的计时器
      timeout = setTimeout(() => {
        fn.apply(this, arguments)
      }, 500);
    }
  }

通过闭包的形式,将timeout和计时器一同返回,当被执行时就会结束之前的计时器,所以即使多次触发(相隔不超过500ms),也只会执行同一个fn,通过apply改变fn的this指向

arguments就是不确定的参数,当不确定函数有多少个参数的时候,就可以使用arguments

function test() {
    var s = "";
    for (var i = 0; i < arguments.length; i++) {
    alert(arguments[i]);
        s += arguments[i] + ",";
    }
    return s;
}

test("name", "age"); // name,age

arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。

Arguments 对象: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments

 

但是,虽然说是大部分触发无效,但是又不希望他一直都不触发,比如一个用户一直玩滚动条,这样就一直都无法触发函数。

那么可以给他一个时间限制,超出这个时间限制的话,不像防抖那样即使重复触发也会执行的,就是节流

节流:指定时间间隔内只会执行一次任务。

function throttle (fn) {
    let canRun = true;
    return function () {
      if(!canRun) return;
      // 重复点击时,在时间结束前防止重复执行
      canRun = false;
      // 最多
      setTimeout(() => {
        fn.call(this, arguments);
        canRun = true;
      }, 3000)
    }
  }

跟防抖不一样的思路,整个时间段内只有一个计时器,效果就是从第一次触发到3000ms里的重复触发都不会执行fn,在3000ms之后执行一次fn

 

参考资料:

  1. https://mp.weixin.qq.com/s/crXTrI1hJSlbWtAco-jHFw
  2. https://juejin.im/post/5c87b54ce51d455f7943dddb
乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值