都2022年了,防抖是不是也应该了解一下了?

2022-12-12 0 432

热烈欢迎高度关注我的社会公众号:后端高速成长回忆录

序言

在他们写工程项目碰到不乐意的使用者的这时候,比如两个登入按键,他就这回要反反复复点好数次,初始化了/loginUSB好数次,呢好些?

即使牵涉到ajax允诺,就会有这种的情形,假设 1 秒促发了 60 次,每一反弹就要在 1000 / 60 = 16.67ms 内顺利完成,不然就会有雅雷再次出现。

所以多于允诺须要写HDR吗?

总之并非,但凡(可能将)牵涉到频密该事件促发的地方性,都须要写HDR。

window 的 resize、scrollmousedown、mousemovekeyup、keydownclick该事件……

他们单纯的写两个小demo,看呵呵没HDR跟有HDR的效用。

标识符:

// html <button id=”btn” onclick=”shake()”> <span id=”container”>点选我</span> </button> // js var count = 1; var container = document.getElementById(container); var btn = document.getElementById(btn) function shake() { container.innerHTML = count++; };
都2022年了,防抖是不是也应该了解一下了?

怎样同时实现HDR

同时实现HDR,要是介绍HDR的基本原理。

HDR是,无论你促发了数次,我只看你最终促发的那一场,因此在若干个天数后去继续执行本次该事件。

依照那个基本原理,他们能写下这段标识符:

function preventShake(todo,time){ let timeout; return function () { clearTimeout(timeout) timeout = setTimeout(todo, time); } }

设置两个延迟操作的该事件,因此如果再次促发就把之前的延迟取消掉,重新进入计时。

将它运用在刚刚的例子上:

var count = 1; var container = document.getElementById(container); var btn = document.getElementById(btn) function shake() { container.innerHTML = count++; }; function preventShake(todo,time){ var timeout; return function () { clearTimeout(timeout); timeout = setTimeout(todo, time); } } btn.onclick = preventShake(shake,1000);
都2022年了,防抖是不是也应该了解一下了?

他们已经同时实现了基础的它,所以他们继续优化呵呵吧!

this指向优化

看似上面的结果没什么太大问题,但是他们打印呵呵原先的shake和使用了preventShake后的this就会知道,他们指向的并并非两个东西。

原先指向的是

点选我

使用了preventShake后this指向的是Window对象!

于是他们要加一步,是改变this指向。

function preventShake(todo,time){ var timeout; return function () { var that = this; clearTimeout(timeout); timeout = setTimeout(function(){ todo.apply(that); }, time); } }

这种就解决了this指向可能将带来的问题。

最终

至此,那个简易的HDR函数就写完了,可能将我想的还不太完善,希望大家给予建议,我也会及时学习,之后将其完善,争取做的更好。

感兴趣的朋友能留个高度关注,他们一同进步!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务