一、 实现一个节流函数

// 思路:在规定时间内只触发一次
function throttle (fn, delay) {
  // 利用闭包保存时间
  let prev = Date.now()
  return function () {
    let context = this
    let arg = arguments
    let now = Date.now()
    if (now - prev >= delay) {
      fn.apply(context, arg)
      prev = Date.now()
    }
  }
}

function fn () {
  console.log('节流')
}
addEventListener('scroll', throttle(fn, 1000))

二、 实现一个防抖函数

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

function fn () {
  console.log('防抖')
}
addEventListener('scroll', debounce(fn, 1000))

最新文章

  1. Pyqt 中__init__(self,parent==None) parent理解
  2. MVC3中 ViewBag、ViewData和TempData的使用和区别
  3. AJAX制作JSON格式的实时更新数据的方法
  4. 使用Java编写并运行Spark应用程序
  5. MVC +EF+linq 多表联查
  6. response.sendRedirect("")和request.getRequestDispatcher("").forward(req,resp);
  7. DiskGenius(磁盘分区/数据恢复) 32位 V4.9.1 免费绿色版
  8. Ubuntu下 Astah professional 6.9 安装
  9. Linux网络设备驱动(一) _驱动模型
  10. [C#学习]0.发表之前想说的
  11. JavaWeb(七)Cookie,EL表达式,标准标签库
  12. 【★】Web精彩实战之
  13. 数据库 MySQL进阶之索引
  14. Invoker-n颜色涂m个珠子的项链
  15. 第三方工具系列--Lombok常用注解
  16. Ubuntu下 QT添加外部链接库(.so文件)示例
  17. AVAudioPlayer播放音频文件时没声音
  18. BZOJ1074 [SCOI2007]折纸origami
  19. centos 清除yum缓存
  20. 【BZOJ2138】stone(线段树,Hall定理)

热门文章

  1. 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据
  2. JS处理时间戳、前台拿到日期时间戳,时间戳转日期格式
  3. SLAM方向国内有哪些优秀公司?
  4. java虚拟机-GC-GC算法
  5. html select 可输入 可编辑
  6. ICC中用Tcl脚本给版图中的Port/Terminal加Label的方法
  7. C#实现某一属性值变化时触发事件
  8. 小程序实现图片上传,预览以及图片base64位处理
  9. 小白学python-day04-运算符、while循环相关
  10. Centos7 安装VNCserver&图形界面