什么是防抖?and什么是节流?一起来开心的学习下吧。

首先什么是防抖:就是在一定的时间内事件只发生一次,比如你点击button按钮,1秒内任你单身30年手速点击无数次,他也还是只触发一次。举个例子,当你在页面中使用onkeyUp监听用户在input框中的输入,如果用户按住一个6不放,那监听事件岂不是一直被触发,这样就浪费了一部分性能了,那么我们在一定事件内监听,也就是说我过了一秒再来看看你输入了多少个6,那这样是不是轻松多了。ok,解释清楚了那么就来看下代码,更加清晰。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>防抖</title>
</head>
<body>
<button id="debounce">防抖,防抖,防抖</button>
<script>
window.onload = function () {
let obtn = document.getElementById('debounce'); //获取按钮
obtn.addEventListener('click',debounceHandle(debounce),false); //监听绑定事件
} //防抖函数
function debounceHandle (fn) {
let timer = null;
return function () {
clearTimeout(timer); //如果存在事件就清除定时器
timer = setTimeout(function(){ //如果不存在那么就开启定时器
fn.call(this,arguments);
},300)
}
} //执行函数
function debounce() {
console.log('防抖,防抖,防抖');
}
</script>
</body>
</html>

上面函数也就是在300毫秒内,只会触发一次事件。总结:防抖就是在任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。

接下来什么是节流,假如在一个页面中有任意多张图片,那么就有可能会使用懒加载技术,懒加载呢就是监听滚动条的位置,那么如果用户一直在滚动,那么事件监听就一直在触发,也是浪费性能。那么节流就是在一定时间间隔内触发一次事件。话不多说,先看代码。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>节流</title>
<style>
div {
height: 5000px;
}
</style>
</head>
<body>
<div>节流,节流,节流</div>
<script>
window.onload = function () {
window.addEventListener('scroll',throttleHandle(throttle),false); //监听绑定事件
} //节流函数
function throttleHandle (fn) {
let timer = null,
booleanVal = true; // 声明一个变量标志做判断
return function () {
if (!booleanVal) {
return
} //如果事件正在执行,那么就返回,将布尔值改为false
booleanVal = false;
//事件未执行,创建事件
timer = setTimeout(function() {
fn.apply(this,arguments);
booleanVal = true; //事件执行完将布尔值改回
},300)
}
} //执行函数
function throttle() {
var scrollNum = document.documentElement.scrollTop || document.body.scrollTop;
console.log(scrollNum);
}
</script>
</body>
</html>

这样,在某些特定的工作场景,我们就可以使用防抖与节流来减少不必要的损耗。最后提一个问题,上句提到造成不必要的损耗,那么请问是什么损耗呢?

最新文章

  1. Node.js的cluster模块——Web后端多进程服务
  2. Java 数组声明与初始化
  3. 快手 KSCAD 5.0 矢量图形设计软件
  4. haproxy配置文件
  5. 【转载】 Pyqt QStackedWidget堆栈窗体
  6. mysql注入研究
  7. Maven dependency spring-web vs spring-webmvc
  8. MVC项目创建与项目结构介绍
  9. Ladda – 把加载提示效果集成到按钮中,提升用户体验
  10. 怎么运用ZBrush中的Z球制作身体部分
  11. R语言中判断是否是整数。以及读写excel
  12. js快速打印一个五分制(五颗星)的评分情况
  13. asp.net - GridView根据linkButton值不同跳转不同页面
  14. 标量类型(scalar)
  15. J2EE的13个规范之(二) JDBC 及其使用
  16. NET工厂模式架构
  17. 中国省份毗邻关系JSON数据[相邻省份][所辖市级信息][行政区划]
  18. uirecorder 启动webdriver服务报错
  19. java.lang.IllegalArgumentException: Document base XXX does not exist or is not a readable directory解决方法
  20. centos7使用snmp

热门文章

  1. Swift基础
  2. Java类MemoryUsage查看虚拟机的使用情况
  3. .1-浅析express源码之入口文件
  4. iOS开源项目周报0420
  5. 呼叫WCF Service的方法出现Method not allowed异常
  6. 在MVC应用程序中使用jQuery的验证
  7. VC++窗口创建过程,图形绘制,时钟程序
  8. 【ibatis】入门讲例
  9. Digital Square(hdu4394)搜索
  10. Slickflow.NET 开源工作流引擎基础介绍(七) -- 并行分支多实例模式实现