当前位置:网站首页>喂,你知道节流是什么吗?
喂,你知道节流是什么吗?
2022-08-04 11:13:00 【是乃德也是Ned】
前言
昨天发了有关防抖的文章,很多人都问为啥节流不一起写了呢?这当然是因为昨天那个是上实验课摸鱼写的,节流不没摸出来嘛,嘿嘿。
不过不要慌,节流,它来了!
个人理解:节流的作用与防抖相似,都是为了限制事件的频繁触发。
防抖文章链接:不会还有人不知道防抖吧?
如何实现节流
实现节流,就要先了解节流的原理。
节流就是,在一定的时间内,只执行一次事件。
或者说是,每隔一段时间,只执行一次事件。
要与防抖做一下区分哦~ 防抖是,不管你触发了几次,我只看你最后触发的那一次,并且在若干时间后去执行此次事件。
我了解到的节流,有两种方式,分别是时间戳与定时器。
那么我们来实现一下看看吧~
时间戳
使用时间戳,当触发事件的时候,我们记录当前的时间戳,然后减去之前记录的时间戳(最一开始值一定不要忘了设为 0 ),如果大于设置的时间周期(也就是那个间隔的时间段),就执行函数,然后更新时间戳为当前的时间戳,如果小于,就不执行。
看完是不是觉得很简单?那我们来写一下。
具体的例子还是使用防抖的那个,懒得再写一个啦,嘿嘿~ 将防抖函数换成节流就可 防抖文章链接:不会还有人不知道防抖吧?
function throttle(todo, time) {
var pre = 0;
return function() {
var now = +new Date();
var that = this;
if (now - pre > time) {
todo.apply(that);
pre = now;
}
}
}
使用的话还是跟之前相同:
btn.onclick = throttle(shake,3000);
为什么设置3000,当然想让效果看起来明显一些,下面来看看效果吧:
时间戳节流.gif
好了好了,别在心里数123了,我们接着往下来。
定时器
当触发事件的时候,我们设置一个定时器,再触发事件的时候,如果定时器存在,就不执行,直到定时器执行,然后执行函数,清空定时器,这样就可以设置下个定时器。
上代码:
function throttle(todo, time) {
var timeout,that;
return function() {
that = this;
if (!timeout) {
timeout = setTimeout(function(){
timeout = null;
todo.apply(that)
}, time)
}
}
}
看看效果:
定时器节流.gif
可以看出,它是过了3s才生效的,但是不知道为什么,这种方式给我的体验感不是很好,可能是因为不是点击的下一刻就有了反馈吧~
这块要加上一个过渡动画,是不是会好很多?
比较
既然有两种方法,那就要说一下他们的区别。
第一种:在例子中可以清楚的看到,点击触发后立即有反馈(执行第一次),连续触发直到过了等待时间才会进行下一次执行,停止触发就不会执行。
第二种:过了等待时间才会执行第一次,停止触发还会执行一次。
在网上看到了这样的形容词:有头无尾和无头有尾,是不是很形象。
最后
啊,终于结束了!还是那句话,可能我想到的或者写的不是很完善,希望大家能够指出,我会及时更正哒。
要是以后的我觉得有地方可以优化,也会回来更新的! 关注我,我们一起学习进步吧!
边栏推荐
- Graphic and text hands-on tutorial--ESP32 MQTT docking EMQX local server (VSCODE+ESP-IDF)
- Use pytest hook function to realize automatic test result push enterprise WeChat
- Zikko launches new Thunderbolt 4 docking station with both HDMI2.1 and 2.5GbE
- 单调栈一些题目练习
- Graphical Hands-on Tutorial--ESP32 OTA Over-the-Air Upgrade (VSCODE+IDF)
- What is the principle of thermal imaging temperature measurement?Do you know?
- Difference between ArrayList and LinkedList
- mysqldump远程备份数据库
- win8和win10下,visual studio 2008 调试出现无响应的卡死问题解决
- Small program containers accelerate the construction of an integrated online government service platform
猜你喜欢

Graphical Hands-on Tutorial--ESP32 One-Key Network Configuration (Smartconfig, Airkiss)

8月活动|51CTO十七周年庆,发博文得茶具/笔记本/T恤等礼品!

Maple 2022 software installation package download and installation tutorial

Leetcode刷题——构造二叉树(105. 从前序与中序遍历序列构造二叉树、106. 从中序与后序遍历序列构造二叉树)

Meishe Q&A Room | Meiying VS Meishe Cloud Editing

zabbix部署

iMeta | German National Cancer Center Gu Zuguang published a complex heatmap visualization method

ECCV 2022 | 清华&腾讯AI Lab提出REALY: 重新思考3D人脸重建的评估方法

Maple 2022软件安装包下载及安装教程

Jenkins User Manual (1) - Software Installation
随机推荐
Super Learning Method
图文手把手教程--ESP32 OTA空中升级(VSCODE+IDF)
MySQL不提供数组,只能做成表吗?
【励志】复盘的重要性
mongo-导出数据到mysql
Camunda整体架构和相关概念
AWS Lambda related concepts and implementation approach
Graphic and text hands-on tutorial--ESP32 MQTT docking EMQX local server (VSCODE+ESP-IDF)
【LeetCode】701.二叉搜索树中的插入操作
Heap Sort
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
Four ways to traverse a Map
怎么禁止textarea拉伸
网管交换机与非网管交换机如何选择?
职责链模式(responsibilitychain)
123
8月活动|51CTO十七周年庆,发博文得茶具/笔记本/T恤等礼品!
面试蚂蚁(P7)竟被MySQL难倒,奋发图强后二次面试入职蚂蚁金服
cat /proc/kallsyms 发现内核符号表值都为0
*iframe*