什么是防抖? 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>
- Windows.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>
- Windows.onload = function() {
- Windows.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>
这样, 在某些特定的工作场景, 我们就可以使用防抖与节流来减少不必要的损耗. 最后提一个问题, 上句提到造成不必要的损耗, 那么请问是什么损耗呢?
来源: http://www.bubuko.com/infodetail-3007198.html