debounce 去抖

我的理解很简单,比方说window.onscroll会疯狂触发handler,此时给它一个debounce(handler, delayTime).

就是不管你延时时间内触发了多少hanlder,我最后只执行一次。(理解把之前多次触发合并成一次,节省浏览器工作)

function debounce(fn, delay) {
var ctx
var args
var timer = null
var later = function () {
fn.apply(ctx, args)
timer = null
}
return function () {
ctx = this
args = arguments
if (timer) {
clearTimeout(timer)
timer = null
}
timer = setTimeout(later, delay)
}
}

throttle 节流

不管你怎么触发#24,反正我就是固定时间内必定触发一次

function throttle(fn, delay) {
var ctx
var args
var previous = Date.now()
var later = function () {
fn.apply(ctx, args)
}
return function () {
ctx = this
args = arguments
var now = Date.now()
var diff = now - previous - delay
if (diff >= 0) {
previous = now
setTimeout(later, delay)
}
}
}

以上参考地址:https://segmentfault.com/a/1190000005926579

我在想 throttle可以这样改吗。。。

function throttle(fn, delay) {
var ctx
var args
var timer = null
var later = function () {
fn.apply(ctx, args)
timer = null
}
return function () {
ctx = this
args = arguments
if (timer) return
timer = setTimeout(later, delay)
}
}

哈哈这段我没测试鸭(懒癌)。错了请告诉我我删掉

debounce还是throttle(去抖和节流)的更多相关文章

  1. JS的去抖、节流

    去抖(debounce) 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时. //模拟一段ajax请求 function ajax(content) { console.log('aj ...

  2. vue项目中的去抖与节流

    节流 // fn是我们需要包装的事件回调, interval是时间间隔的阈值 function throttle(fn, interval) { let last = 0; // last为上一次触发 ...

  3. JS 函数节流和去抖

    1.什么是节流和去抖? 节流.就是拧紧水龙头让水少流一点,但是不是不让水流了.想象一下在现实生活中有时候我们需要接一桶水,接水的同时不想一直站在那等着,可能要离开一会去干一点别的事请,让水差不多流满一 ...

  4. 节流(Throttling)和去抖(Debouncing)详解

    这篇文章的作者是 David Corbacho,伦敦的一名前端开发工程师.之前我们有一篇关于”节流”和”去抖”的文章:The Difference Between Throttling and Deb ...

  5. hover时显示可跟随鼠标移动的浮动框,运用函数节流与去抖进行优化

    在很多笔试面试题中总能看到js函数去抖和函数节流,看过很多关于这两者的讨论,最近终于在一个需求中使用了函数去抖(debounce)和函数节流(throttle). 需要完成的效果是,鼠标在表格的单元格 ...

  6. 理解JavaScript中的去抖函数

    何为去抖函数?在学习JavaScript去抖函数之前我们需要先弄明白这个概念.很多人都会把去抖跟节流两个概念弄混,但是这两个概念其实是很好理解的. 去抖函数(Debounce Function),是一 ...

  7. (转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)

     JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)         函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过 ...

  8. JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)

    函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用. 函数节流的原理挺简单的,估计大家都想到了,那就是定时器.当我 ...

  9. JavaScript函数节流(throttle)与函数去抖(debounce)

    对于浏览器窗口大小改变的时候,来动态改变页面元素的大小,可以采用window的resize事件,实现代码: <script type="text/javascript"> ...

随机推荐

  1. lnmp的安装--nginx

    1.nginx的安装 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安 ...

  2. 印象笔记再WIN10同步失败解决方法

    IE11不支持tls1.1导致印象笔记安全性失效 打开组策略,关闭IE的加密策略就可以同步了

  3. SQL Server memory – Internals

    https://blogs.msdn.microsoft.com/karthick_pk/2013/03/16/sql-server-memory-internals/

  4. HDU 1248寒冰王座-全然背包或记忆化搜索

    寒冰王座 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. (转)C++ CListCtrl使用技巧的摘抄

    转:http://blog.csdn.net/sanshao27/article/details/1888315 1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标      ...

  6. Apache 配置学习占位

    http://www.cnblogs.com/yeer/archive/2011/01/18/1938024.html http://www.cnblogs.com/zgx/archive/2011/ ...

  7. 设置IIS 兼容32位DLL

    限Win7/Windows servser 2008  IIS的设置: 1.选择引用程序池 2.选择公布网站的.点击高级设置 3.启用32位应用程序属性改为True

  8. [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题

    对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑.MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有下面几 ...

  9. IOS 数据存储之 Core Data具体解释

    Core Date是ios3.0后引入的数据持久化解决方式,它是是苹果官方推荐使用的.不须要借助第三方框架.Core Date实际上是对SQLite的封装.提供了更高级的持久化方式.在对数据库操作时, ...

  10. ubuntu16.04下配置静态ip

    ubuntu下配置静态ip 1.先获取ip基本信息 ifconfig enp3s0 Link encap:以太网 硬件地址 2c:4d:54:65:de:6e inet 地址:192.168.199. ...