源文:https://blog.csdn.net/crystal6918/article/details/62236730#reply

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head><body><div id="container" style="height: 300px;background: red;overflow: auto"><div style="height: 3000px;background: yellow;"></div></div>
</body>
<script>//初级防抖/* // 将会包装事件的 debounce 函数function debounce(fn, delay) {// 维护一个 timerlet timer = null;return function () {// 通过 ‘this’ 和 ‘arguments’ 获取函数的作用域和变量let context = this;            let args = arguments;clearTimeout(timer);timer = setTimeout(function () {fn.apply(context, args);}, delay);}}// 当用户滚动时被调用的函数function foo() {console.log('You are scrolling!');}// 在 debounce 中包装我们的函数,过 2 秒触发一次let elem = document.getElementById('container');elem.addEventListener('scroll', debounce(foo, 500)); *///更高级防抖/*  function debounce(func, delay, immediate) {var timer = null;return function () {var context = this;var args = arguments;if (timer) clearTimeout(timer);if (immediate) {//根据距离上次触发操作的时间是否到达delay来决定是否要现在执行函数var doNow = !timer;//每一次都重新设置timer,就是要保证每一次执行的至少delay秒后才可以执行timer = setTimeout(function () {timer = null;}, delay);//立即执行if (doNow) {func.apply(context, args);}} else {timer = setTimeout(function () {func.apply(context, args);}, delay);}}}function foo() {console.log('You are scrolling!');}let elem = document.getElementById('container');elem.addEventListener('scroll', debounce(foo, 500, true)); */
</script>
<script>//节流1.时间戳版/*  var throttle = function(func,delay){var prev = Date.now();return function(){var context = this;var args = arguments;var now = Date.now();if(now-prev>=delay){//func()func.apply(context,args);prev = Date.now();}}} *///节流2.定时器版/* var throttle = function (func, delay) {var timer = null;return function () {var context = this;var args = arguments;if (!timer) {timer = setTimeout(function () {func.apply(context, args);timer = null;}, delay);}}} *///节流3.综合使用时间戳与定时器var throttle = function (func, delay) {var timer = null;var startTime = Date.now();return function () {var curTime = Date.now();var remaining = delay - (curTime - startTime);var context = this;var args = arguments;clearTimeout(timer);if (remaining <= 0) {func.apply(context, args);startTime = Date.now();} else {timer = setTimeout(func, remaining);}}}function foo() {console.log('arguments');}let elem = document.getElementById('container');elem.addEventListener('scroll', throttle(foo, 500, true));
</script></html>

  

转载于:https://www.cnblogs.com/webSong/p/8991986.html

js:防抖动与节流【转载】相关推荐

  1. underscore.js中的节流函数debounce及trottle

    函数节流   throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeou ...

  2. 面试必问题:JS防抖与节流

    摘要:防抖与节流可谓是面试常见,其实很好理解,下面带你分分钟了解防抖与节流的基本思想与写法~ 本文分享自华为云社区<JS防抖与节流快速了解与应用>,作者:北极光之夜. . 一.速识防抖: ...

  3. 2019 面试准备 - JS 防抖与节流 (超级 重要!!!!!)

    Hello 小伙伴们,如果觉得本文还不错,记得给个 star , 你们的 star 是我学习的动力!GitHub 地址 本文涉及知识点: 防抖与节流 重绘与回流 浏览器解析 URL DNS 域名解析 ...

  4. 利用JS调用aspx页面(转载)

    在实际开发中如新闻系统就需要利用js来调用某分类的新闻等. 非Codebehind版 Showjs.aspx ---------------------------- <%Response.Wr ...

  5. Backbone.js源码解读(转载)

    前言: 个人也翻译过一遍,可是基础知识不够,所以理解的没有很清楚//Backbone.js 0.9.2//(c) 2010-2012 Jeremy Ashkenas, DocumentCloud In ...

  6. ie6 javascript js 缺少标识符总结(转载)

    转载http://blog.csdn.net/qingyundys/article/details/6218280 ie6 javascript js 缺少标识符总结 1. ie6下,javascri ...

  7. js动态添加options(转载)

    JS动态添加Option的几种方式 在处理表单的时候,经常会有这样的需求:给定一定的数据来生成某个select的option,或者更进一步,某些option或许预先选中或者有高亮显示. 下面我们就来温 ...

  8. JS操作保存cookie(转载他人)

    2019独角兽企业重金招聘Python工程师标准>>> 网上借鉴了一些朋友的经验,做了一个小例子,js操作cookie,实现登录密码保存.cookie的存放方式是以键值对的方式保存的 ...

  9. JS作用域链(转载)

    这几天看犀牛书的一点心得和总结,做个笔记吧,主要是概念层面的,JS高手大可忽略. 变量的作用域 变量的作用域其实很简单:在函数内定义的局部变量只在本函数内有效,在所有函数体外定义的变量在JS代码的全局 ...

  10. 发条js调试工具_【转载】移动端js调试工具:eruda

    通常写前端页面都在Chrome浏览器的开发模式下进行调试,但是写放在移动端的H5页面时,有时候会遇到在Chrome上调试没有问题,但是在手机的浏览器上有问题的情况:也有的页面是需要放在微信公众号中的, ...

最新文章

  1. 故障排除:硬盘坏道修复术
  2. 输入代码自动生成流程图_厉害了,这个工具能用伪代码生成流程图
  3. VS2015 error LNK2019 无法解析的外部符号 _WinMain@16,该符号在函数 int __cdecl invoke_main(void)
  4. WPF - 图形设计器(Diagram Designer)
  5. jaxb xml配置_JAXB和Log4j XML配置文件
  6. JQuery实现——黑客帝国代码雨效果
  7. linux下定时网站文件备份和数据备份以及删除旧备份标准代码
  8. Spring Boot (30) 上传文件
  9. 代理服务器 查看npm_使用sinopia搭建npm仓库,代理内网服务器npm服务
  10. 【BZOJ1951】古代猪文(CRT,卢卡斯定理)
  11. Tahoma 字体在网页中应用的问题
  12. Darknet官方文档(含Yolo-V2和V3在win和Linux训练测试步骤、计算mAP、调参优化等)
  13. 【软件推荐】第6节:微力同步
  14. 云计算,社交网络,移动互联网
  15. 8b/10b编码是什么?
  16. python3凸优化
  17. 超详细的SpringBoot+Mybatis+Vue整合笔记
  18. Docker最新超详细教程——基本操作
  19. powerdesigner绘制UML模型(包括用例图、类图、时序图、E-R图……)
  20. 全连接层介绍以及简单实现

热门文章

  1. 带有参数的输出存储过程
  2. python判断用户名是否有效_Python校验用户名是否合法示例
  3. CS224N笔记——RNN和语言模型
  4. 真甲先生 38期:2019年百度快排×××?
  5. 分享一个在线生成接口文档工具
  6. Linux下互斥量加锁与解锁操作的C代码实现
  7. node 学习 ——模块导出
  8. PySpark任务在YARN集群上运行python 算法
  9. 第二季-专题20-移植bootm命令启动内核
  10. JS自定义表单提交处理方案