函数的防抖和节流

防抖

所谓防抖,就是指触发事件后在n秒内函数只能触发一次,如果在n秒内又触发了事件,则会重新计算函数执行时间。

/*
  防抖函数
  @param {Function} func 要执行的函数
  @param {Number} wait 要等待的时间 ms
*/
function debounce(func, wait) {
  let timer = null;
  return function () {
    let context = this;
    let args = arguments;

    timer && clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args)
    }, wait);
  }
}

// 使用方法

document.getElementById(‘btn‘).onclick = debounce(function () {

  this.innerHTML = ‘按钮‘ + num++;

}, 200);

节流

所谓节流,就是指连续触发事件,但是在n秒中只执行一次函数。

/*
  节流函数
  @param {Function} func 要执行的函数
  @param {Number} wait 要等待的时间 ms
*/
function throttle(func, wait) {
  // 记录上一次函数触发的时间
  let lastTime = 0;
  return function () {
    let nowTime = Date.now();
    let context = this;
    let args = arguments;
    if (nowTime - lastTime > wait) {
      // 修正this指向
      func.apply(context, args);
      lastTime = nowTime;
    }
  }
};
// 使用方法
document.onmousemove = throttle(function () {
  console.log(‘函数触发了?‘)
}, 200);

原文地址:https://www.cnblogs.com/z937741304/p/11468621.html

时间: 2024-10-07 11:52:26

函数的防抖和节流的相关文章

VUE中的函数的防抖和节流 以及应用场景

先看看概念 函数防抖(debounce): 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时. 应用场景: search搜索联想,用户在不断输入值时,用防抖来节约请求资源. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次 函数节流(throttle): 规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效:

函数防抖与节流

1.为什么会有函数的防抖与节流及使用场景 在进行窗口的resize.scroll,输入框内容校验或者向后端发起ajax等操作时, 如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕. 此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果. 2.函数防抖与函数节流的概念及实现原理 函数防抖(debounce): 当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了

防抖和节流函数最简版

防抖和节流函数最简版 防抖: 多次触发事件只执行一次(适用于断续的事件, 比如 click.input) 1 function debounce(fn, time) { 2 let timeout 3 return () => { 4 if (timeout) { 5 clearTimeout(timeout) 6 } 7 timeout = setTimeout({ 8 fn 9 }, time) 10 } 11 } 节流: 在指定时间内多次触发事件只执行一次(适用于连续的事件, 比如 scr

前端进击的巨人(八):浅谈函数防抖与节流

本篇课题,或许早已是烂大街的解读文章.不过春招系列面试下来,不少伙伴们还是似懂非懂地栽倒在(-面试官-)深意的笑容之下,权当温故知新. JavaScript的执行过程,是基于栈来进行的.复杂的程序代码被封装到函数中,程序执行时,函数不断被推入执行栈中.所以 "执行栈" 也称 "函数执行栈". 函数中封装的代码块,一般都有相对复杂的逻辑处理(计算/判断),例如函数中可能会涉及到 DOM 的渲染更新,复杂的计算与验证, Ajax 数据请求等等. 前端页面的操作权,大部分

js 函数的防抖(debounce)与节流(throttle)

原文:函数防抖和节流: 序言: 我们在平时开发的时候,会有很多场景会频繁触发事件,比如说搜索框实时发请求,onmousemove, resize, onscroll等等,有些时候,我们并不能或者不想频繁触发事件,咋办呢?这时候就应该用到函数防抖和函数节流了! 准备材料: <div id="content" style="height:150px;line-height:150px;text-align:center; color: #fff;background-col

vue函数防抖和节流

Vue函数防抖和节流https://zhuanlan.zhihu.com/p/72363385 <template> <div> <input type='text' v-model='value' @keydown = "hangleChange"> </div> </template> <script> function debounce(func, wait=1000){ let timeout; retur

【源码】防抖和节流源码分析

前言 防抖.节流主要用于频繁事件触发,例如鼠标移动.改变窗口大小等.lodash等函数库具备相对应的api, _.debounce ._.throttle. 核心技术:闭包. 区别: 防抖, 连续触发, 第一次和最后一次触发有效 节流, 一段时间内仅触发一次(第一次) 本文以防抖函数为例, 详细说明. 实现 原理, 计时器存储状态. function debounce(fn, delay) { return function() { console.log(fn.timer, count2);

详谈js防抖和节流

本文由小芭乐发表 0. 引入 首先举一个例子: 模拟在输入框输入后做ajax查询请求,没有加入防抖和节流的效果,这里附上完整可执行代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>没有防抖</title> <style type="text/css"></sty

防抖和节流

在前端开发中,有一部分用户行为会频繁的触发事件,而对于DOM操作,资源加载等耗费性能的处理,很可能会导致卡顿,甚至浏览器的崩溃.防抖和节流就是为了解决这一类的问题. window.onscroll = function () { //滚动条位置 let scrollTop = document.body.scrollTop || document.documentElement.scrollTop; console.log('滚动条位置:' + scrollTop); } 效果如下 从效果上,我