博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防抖和节流
阅读量:6548 次
发布时间:2019-06-24

本文共 1304 字,大约阅读时间需要 4 分钟。

在JavaScript中,防抖和节流其实是一个很重要的概念。主要应用场景就是会频繁触发的事件。比如监听滚动、比如点赞功能,总不能点一次赞就向后台发送一次数据,这时候就要用到防抖和节流。

防抖和节流的核心就是定时器,我们要知道定时器的一个概念,就是在定时之后,在没触发之前清除定时器,这个定时器方法不会被触发。

防抖最简单例子:

var t; window.addEventListener('scroll',function(e){ if(t) clearTimeout(t); t = setTimeout(function(){ console.log(96) },500); });

监听scroll,当滑动的时候就判断是否有定时器,如果有,就清除定时器,重新设定一个定时器,直到不再滑动就执行定时器的方法。

上面的方法有一个全局的变量t,我们可以用闭包的方式:

window.addEventListener('scroll',function(e){ var t; return function(){ if(t) clearTimeout(t); t = setTimeout(function(){ console.log(96) },500); } }());

一般防抖就能符合大部分频繁触发的场景了,也有比较特殊的情况,图片懒加载的时候,虽然在一直滑动,但是因为滑动之后我们相应的还是需要加载图片,不可能等到不滑动了加载所有图片,所以会用到节流,一定时间内还是会执行方法。

节流使用场景就是频繁触发一个事件,我们用了防抖,只会在停止触发的时候执行一次,但是在频繁触发情况下还是需要执行某个方法,这时候就要用到节流。

节流简单例子

var startTime = Date.now(); //开始时间var time = 2000; //间隔时间var timer;window.onscroll = function throttle(){    var currentTime = Date.now();    if(currentTime - startTime >= time){        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;        console.log('滚动条位置:' + scrollTop);        startTime = currentTime;    }else{        clearTimeout(timer);        timer = setTimeout(function () {            throttle()        }, 50);    }}复制代码

因为还是太菜,节流闭包方式还是没办法封装成功,但是大致思路就是这样,可以自己运行一下代码。

欢迎关注Coding个人笔记 公众号

转载于:https://juejin.im/post/5c4ed0e851882524a76720c1

你可能感兴趣的文章
尺规院-DevOps
查看>>
我的友情链接
查看>>
通过经典的实际例子来学习正则表达式
查看>>
python中获取当前位置所在的行号和函数名
查看>>
搭建简单的lamp环境
查看>>
RHEL7: How to get started with CGroups.
查看>>
给Jenkins换新装后,测试部的妹子都说好看
查看>>
yum搭建lnmp环境
查看>>
沒有量化數據,何來有效管理
查看>>
Solr官方文档系列——Conclusion
查看>>
android性能监测工具,帮了我很大的忙
查看>>
linux如何分大于2T的磁盘分区
查看>>
Android:ListView、BaseAdapter、convertView、ListView优化及事件、notifyDataSetChanged()
查看>>
JS操作JSON总结
查看>>
Grafan5.4.2+Zabbix安装配置
查看>>
windows8.1 下硬盘安装 ubuntu-14.04.2-desktop-amd64.iso
查看>>
人大MapReduce编程题解答-001,A+B Per Line
查看>>
Java程序员从笨鸟到菜鸟之(三十四)大话设计模式(五)创建者模式和原型模式...
查看>>
eclipse构建maven的web项目
查看>>
Ubuntu去掉命令行前用户名和主机名步骤
查看>>