都2021年了,节流是不是也应该了解一下了?

简介: 昨天发了有关防抖的文章,很多人都问为啥节流不一起写了呢?这当然是因为昨天那个是上实验课摸鱼写的,节流不没摸出来嘛,嘿嘿。不过不要慌,节流,它来了!个人理解:节流的作用与防抖相似,都是为了限制事件的频繁触发。

前言

昨天发了有关防抖的文章,很多人都问为啥节流不一起写了呢?这当然是因为昨天那个是上实验课摸鱼写的,节流不没摸出来嘛,嘿嘿。

不过不要慌,节流,它来了!

个人理解:节流的作用与防抖相似,都是为了限制事件的频繁触发。

防抖文章链接: 都2021年了,不会还有人不知道防抖吧?

如何实现节流

实现节流,就要先了解节流的原理。

节流就是,在一定的时间内,只执行一次事件。

或者说是,每隔一段时间,只执行一次事件。

要与防抖做一下区分哦~

防抖是,不管你触发了几次,我只看你最后触发的那一次,并且在若干时间后去执行此次事件。

我了解到的节流,有两种方式,分别是时间戳定时器

那么我们来实现一下看看吧~

时间戳

使用时间戳,当触发事件的时候,我们记录当前的时间戳,然后减去之前记录的时间戳(最一开始值一定不要忘了设为 0 ),如果大于设置的时间周期(也就是那个间隔的时间段),就执行函数,然后更新时间戳为当前的时间戳,如果小于,就不执行。

看完是不是觉得很简单?那我们来写一下。

具体的例子还是使用防抖的那个,懒得再写一个啦,嘿嘿~ 将防抖函数换成节流就可

防抖文章链接:都2021年了,不会还有人不知道防抖吧?

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才生效的,但是不知道为什么,这种方式给我的体验感不是很好,可能是因为不是点击的下一刻就有了反馈吧~

这块要加上一个过渡动画,是不是会好很多?

比较

既然有两种方法,那就要说一下他们的区别。

第一种:在例子中可以清楚的看到,点击触发后立即有反馈(执行第一次),连续触发直到过了等待时间才会进行下一次执行,停止触发就不会执行。

第二种:过了等待时间才会执行第一次,停止触发还会执行一次。

在网上看到了这样的形容词:有头无尾无头有尾,是不是很形象。

最后

啊,终于结束了!还是那句话,可能我想到的或者写的不是很完善,希望大家能够指出,我会及时更正哒。

要是以后的我觉得有地方可以优化,也会回来更新的!

点个赞,我们一起学习进步吧!

相关文章
|
安全 网络协议 物联网
AliOS Things开发前准备 |《AliOS Things快速开发指南》
在运行AliOS Things系统之前,您需要做好一系列准备工作,包括搭建环境、安装驱动设备、下载AliOS Things系统源码、安装开发工具AliOS Studio等。本文详细介绍如何完成这些准备工作。
AliOS Things开发前准备 |《AliOS Things快速开发指南》
|
9月前
|
云安全 安全 小程序
阿里云安全体检功能评测报告 - 安全菜鸟角度
本文介绍了阿里云安全体检的使用体验及效果。作为一名测试开发工程师,日常工作繁重且加班频繁,曾因忽视环境漏洞造成损失。阿里云的安全体检服务提供了从登录官网、访问控制台到开启和查看体检结果的完整流程,帮助高效发现程序、服务器等环境中的潜在风险。通过该服务,用户可以快速定位并修复安全问题,如攻击告警、AK泄露等,极大提升了应急响应效率。尽管存在一些不足,如高级功能门槛较高、文档细节不足等,但整体表现优秀,特别适合需要全面了解云上环境安全状况的用户。未来工作中将持续优化安全策略,确保系统稳定运行。
545 8
|
机器学习/深度学习 存储 搜索推荐
连续迁移学习跨域推荐排序模型在淘宝推荐系统的应用
本文探讨了如何在工业界的连续学习的框架下实现跨域推荐模型,提出了连续迁移学习这一新的跨域推荐范式,利用连续预训练的源域模型的中间层表征结果作为目标域模型的额外知识,设计了一个轻量级的Adapter模块实现跨域知识的迁移,并在有好货推荐排序上取得了显著业务效果。
1297 0
连续迁移学习跨域推荐排序模型在淘宝推荐系统的应用
|
数据采集 SQL 开发框架
菜刀webshell特征分析
菜刀webshell特征分析
646 0
菜刀webshell特征分析
|
供应链 Kubernetes 安全
谈谈我对云原生与软件供应链安全的思考
阿里云容器服务 ACK、容器镜像服务 ACR 在容器安全领域有着深厚的投入。在信通院首次 “云原生安全成熟度”评估中,阿里云取得了国内唯一全域最高等级认证。我们也在和 OCI, Sigstore 等社区合作,持续为企业客户提供更加可信赖、更加易用的软件供应链安全能力。
1298 97
谈谈我对云原生与软件供应链安全的思考
|
Java 数据库连接 数据库
信不信十分钟让你彻底搞懂java反射
概念:反射是Java的一种机制,让我们可以在运行时获取类的信息 作用:通过反射,我们可以在程序运行时动态创建对象,还能获取到类的所有信息,比如它的属性、构造器、方法、注解等;
18426 2
信不信十分钟让你彻底搞懂java反射
|
存储 数据采集 监控
新氧云原生全栈数仓最佳实践
新氧数据中台数据研发部总监 高宏超:自建大数据平台面临困难与挑战,我们从成本、安全、资产管理及组件可扩展性等综合考量后决定整体迁移到阿里云,上云后,总体资源成本降低30%,性能上提升2-3倍,商家、用户、活动等运营体验提升,未来期待更多互动和交流。
1921 0
新氧云原生全栈数仓最佳实践
|
机器学习/深度学习 并行计算 数据可视化
图神经网络13-图注意力模型GAT网络详解
图神经网络13-图注意力模型GAT网络详解
1184 0
|
算法 数据处理 数据库
TCGA数据库的利用(三)—做差异分析的三种方法
今天更新TCGA数据库的利用系列第三篇文章,在对TCGA数据进行挖掘时,通常会筛选出来一些表达量显著异常的基因,作为后续研究的对象,这个筛选过程叫做差异分析;本篇文章将分为三大模块对差异分析进行介绍
|
Android开发
30s教会你在Android模拟器上安装搜狗输入法
30s教会你在Android模拟器上安装搜狗输入法
1008 0
30s教会你在Android模拟器上安装搜狗输入法