当前位置:网站首页>学习一下 常说的节流
学习一下 常说的节流
2022-08-09 04:55:00 【lazytomato】
start
节流(throttle),减少流量,短时间内触发多次,我每隔一段时间触发一次;
手写
节流
还是之前的输入框输入事件的案例,来手写一个版本。需求呢:短时间输入多次内容,我每隔 1 秒触发一次
<!DOCTYPE html>
<html lang="en">
<body>
<input type="text" id="in" />
<script> var input = document.querySelector('#in') let say = function (e) {
console.log('值改变事件', +new Date()) } input.addEventListener('keydown', throttle(say, 1000)) function throttle(fn, wait) {
// 1. 和防抖类似,接收两个参数:函数,间隔时间 // 2. 定义一个变量存储定时器 var timer // 3. 定义一个变量存储第一次执行的时间 var start = 0 return function () {
// 4. 获取当前时间 var now = +new Date() // 5.由于要使用定时器,所以这里存储一下 this 和 arguments var that = this var arg = arguments // 6.是否满足节流的时间限制 if (start + wait <= now) {
// 7. 如果之前有定时器 清除 if (timer) {
clearTimeout(timer) timer = null } // 8. 满足条件,存储一下当前时间,然后允许执行 start = now fn.apply(that, arg) } else if (!timer) {
// 9.如果不满足节流限制,且没有定时器,添加一个定时器 timer = setTimeout(function () {
// 10. 定时器中需要记录定时器执行的时间, start = now fn.apply(that, arg) }, wait) } } } </script>
</body>
</html>
手写防抖的总结:
- start 需要设置默认值 0;不然在
start + wait中会返回 NaN +new Date()算是第一次接触,简单来说效果等同于new Date().getTime, 作用就是:获取当前时间的时间戳;- 其次就是 if 中的逻辑可能一开始不好理解,简单来说,满足时间限制,执行函数;不满足时间限制添加一个定时器稍后执行。
总结:
防抖节流,
防抖是,一段时间内多次触发只执行一次。
节流是,一段时间内多次触发,按时间段执行。
同样是输入框的键盘事件,两者具体使用谁,还是需要看具体的业务场景。本质都是对高频触发的事件做的优化。
end
- 加油
边栏推荐
- 【HMS core】【ML kit】机器学习服务常见问题FAQ
- 杰理之开关降噪语音识别没有用【篇】
- 【UNR #6 A】面基之路(最短路)
- Understanding ML Cross Validation Fast
- 通讯录(动态版)(C语言)(VS)
- [OpenCV] - Find and draw contours
- npm package.json
- Openresty执行lua脚本
- The influence law of genes for disease - read the paper
- 【暑期每日一题】洛谷 P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
猜你喜欢

Quantitative Genetics Heritability Calculation 1: Parent-Child Regression Method

后台登录模块以及验证码登录

JS-DOM-全局、局部、隐式变量,数组()\函数、 prompt输入对话框、confirm(确定用户的决定-弹出对话框)

ELTEK电源维修SMPS5000SIL整流器模块故障分析及特点

基于ABP和Magicodes实现Excel导出操作

学习笔记_numpy图片基本操作_自用

供应商对接Chewy的EDI需求

浅谈产品降本设计

【ITRA】2022年ITRA赛事注册流程 从0-1

浙江DAMA-CDGA/CDGP数据治理认证招生简章
随机推荐
换座位[异或巧妙的让奇偶互换]
【暑期每日一题】洛谷 P5724 【深基4.习5】求极差 / 最大跨度值
Ali YunTianChi competition problem (deep learning) - video enhancement (complete code)
力扣202-快乐数——哈希集合
AttributeError: partially initialized module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'
区别如下概念:路径、绝对路径、相对路径、当前目录。系统磁盘上存在某个可执行文件,但在DOS环境输入其文件名却提示没有这个文件,是什么原因?
Perl basic grammar
Pycharm Debug调试使用+代码调试理解
`英语` 2022/8/8
【Harmony OS】【ARK UI】Lightweight Data Storage
leetcode:315. 计算右侧小于当前元素的个数
EDI对接 New York & Company案例
LN论文、五种归一化原理和实现
A case of missing heritability
通讯录(动态版)(C语言)(VS)
npm package.json
ELTEK电源维修SMPS5000SIL整流器模块故障分析及特点
数据库事务&锁机制
php uses phpoffice/phpspreadsheet to import and export excel tables
浅谈产品降本设计