debounce还是throttle(去抖和节流)
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(去抖和节流)的更多相关文章
- JS的去抖、节流
去抖(debounce) 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时. //模拟一段ajax请求 function ajax(content) { console.log('aj ...
- vue项目中的去抖与节流
节流 // fn是我们需要包装的事件回调, interval是时间间隔的阈值 function throttle(fn, interval) { let last = 0; // last为上一次触发 ...
- JS 函数节流和去抖
1.什么是节流和去抖? 节流.就是拧紧水龙头让水少流一点,但是不是不让水流了.想象一下在现实生活中有时候我们需要接一桶水,接水的同时不想一直站在那等着,可能要离开一会去干一点别的事请,让水差不多流满一 ...
- 节流(Throttling)和去抖(Debouncing)详解
这篇文章的作者是 David Corbacho,伦敦的一名前端开发工程师.之前我们有一篇关于”节流”和”去抖”的文章:The Difference Between Throttling and Deb ...
- hover时显示可跟随鼠标移动的浮动框,运用函数节流与去抖进行优化
在很多笔试面试题中总能看到js函数去抖和函数节流,看过很多关于这两者的讨论,最近终于在一个需求中使用了函数去抖(debounce)和函数节流(throttle). 需要完成的效果是,鼠标在表格的单元格 ...
- 理解JavaScript中的去抖函数
何为去抖函数?在学习JavaScript去抖函数之前我们需要先弄明白这个概念.很多人都会把去抖跟节流两个概念弄混,但是这两个概念其实是很好理解的. 去抖函数(Debounce Function),是一 ...
- (转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)
JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce) 函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过 ...
- JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过了你规定的时间间隔,才能进行下一次该函数的调用. 函数节流的原理挺简单的,估计大家都想到了,那就是定时器.当我 ...
- JavaScript函数节流(throttle)与函数去抖(debounce)
对于浏览器窗口大小改变的时候,来动态改变页面元素的大小,可以采用window的resize事件,实现代码: <script type="text/javascript"> ...
随机推荐
- lnmp的安装--nginx
1.nginx的安装 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安 ...
- 印象笔记再WIN10同步失败解决方法
IE11不支持tls1.1导致印象笔记安全性失效 打开组策略,关闭IE的加密策略就可以同步了
- SQL Server memory – Internals
https://blogs.msdn.microsoft.com/karthick_pk/2013/03/16/sql-server-memory-internals/
- HDU 1248寒冰王座-全然背包或记忆化搜索
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- (转)C++ CListCtrl使用技巧的摘抄
转:http://blog.csdn.net/sanshao27/article/details/1888315 1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 ...
- Apache 配置学习占位
http://www.cnblogs.com/yeer/archive/2011/01/18/1938024.html http://www.cnblogs.com/zgx/archive/2011/ ...
- 设置IIS 兼容32位DLL
限Win7/Windows servser 2008 IIS的设置: 1.选择引用程序池 2.选择公布网站的.点击高级设置 3.启用32位应用程序属性改为True
- [DB][MySql]关于取得自增字段的值、及@@IDENTITY 与并发性问题
对于刚从Oracle转向MySql的人都会为,MySql中没有Oracle里的Sequence而感到困惑.MySql中没有了Sequence,那么MySql的主键用什么方式来实现最好呢? 主要有下面几 ...
- IOS 数据存储之 Core Data具体解释
Core Date是ios3.0后引入的数据持久化解决方式,它是是苹果官方推荐使用的.不须要借助第三方框架.Core Date实际上是对SQLite的封装.提供了更高级的持久化方式.在对数据库操作时, ...
- ubuntu16.04下配置静态ip
ubuntu下配置静态ip 1.先获取ip基本信息 ifconfig enp3s0 Link encap:以太网 硬件地址 2c:4d:54:65:de:6e inet 地址:192.168.199. ...