首页 > 其他分享 >前端防抖和节流

前端防抖和节流

时间:2024-11-12 17:46:46浏览次数:3  
标签:function 防抖 定时器 节流 前端 timer window

国外大佬关于防抖和节流的详细介绍David Corbacho's article

防抖和节流的作用是对前端的性能优化

防抖debounce

说明:单位时间内,频繁触发事件,只执行最后一次

使用场景:搜索框搜索输入,手机号、邮箱验证输入检测

类似王者中的回城

案例:resize事件监听窗口变化

<script>
        const getWindowInfo = function(){
            const windowInfo = {
                width:window.innerWidth,
                height:window.innerHeight
            }
            console.log(windowInfo)
        }

        
        window.addEventListener('resize',getWindowInfo)
</script>

未添加防抖前,每次变化都会打印,浪费浏览器性能

添加防抖效果,自定义防抖函数

 <script>
        const getWindowInfo = function(){
            const windowInfo = {
                width:window.innerWidth,
                height:window.innerHeight
            }
            console.log(windowInfo)
        }


        function my_debounce(fun,time){
            // 声明定时器变量
            let timer = null

            return function(){
                // 事件触发的时候先判断是否有定时器,如果有,取消定时器
                if(timer) clearTimeout(timer)
                // 如果没有,开启定时器,存入定时器变量中
                // 定时器里写函数调用
                timer = setTimeout(function(){
                    fun()
                },time)
                
            }

        }

        
        window.addEventListener('resize',my_debounce(getWindowInfo,500))
 </script>

添加防抖后,窗口变化完成结束后500ms才会执行打印

节流throttle

说明:单位时间内,频繁触发事件,只执行一次 

使用场景:高频事件,如鼠标移动mousemove,页面尺寸缩放resize,滚动条滚动scroll

类似王者中的技能CD

案例:resize事件监听窗口变化

效果:未节流前每次改变都会打印,防抖后只会打印改变结束后的值,节流后可以设置每隔一定时间打印一次,如1s,在这1s内,不论改变窗口多少次,只打印一次

自定义节流函数

<script>
        // 声明定时器变量
        // 事件触发时判断是否有定时器,如果有不开启新定时器
        // 如果没有,开启新定时器
        // 定时器里调用执行的函数 将定时器清空
        function my_throttle(fun, time) {
                let timer = null
                return function () {
                    if (!timer) {
                        timer = setTimeout(function () {
                            fun()
                            timer = null
                        }, time)
                    }
                }
            }
        
        window.addEventListener('resize',my_throttle(getWindowInfo,500))
</script>

简单做法

使用Lodash库中的节流和防抖函数

lodash.throttle | Lodash中文文档 | Lodash中文网

lodash.debounce | Lodash中文文档 | Lodash中文网

标签:function,防抖,定时器,节流,前端,timer,window
From: https://blog.csdn.net/qq_64057263/article/details/143717662

相关文章

  • [转贴]在前端如何玩转 Word 文档
    在日常工作中,大部分人都会使用MicrosoftOfficeWord、WPS或macOSPages等文字处理程序进行Word文档处理。除了使用上述的文字处理程序之外,对于Word文档来说,还有其他的处理方式么?答案是有的。接下来阿宝哥将介绍在前端如何玩转Word文档,阅读本文之后,你将了解以下内容:M......
  • vue前端利用ofd.js实现ofd类型在线预览
    1.安装:npmiofd.js2.axios封装注意事项,responseType:'arraybuffer'//电子证件照exportfunctiongetXkzOriginal(data){returnreq({url:'/bigdata/getXkzOriginal',method:'POST',params:data,res......
  • 前端日期格式转换
    1.获取当前年月日时分秒constdate=newDate();constyear=date.getFullYear();constmonth=(date.getMonth()+1).toString().padStart(2,'0');//JavaScript的月份是从0开始的,所以需要加1constday=date.getDate();consthours=date.getH......
  • 学生HTML个人网页作业作品 使用HTML+CSS+JavaScript个人介绍博客网站 web前端课程设计
    ......
  • web前端期末大作业:基于HTML+CSS+JavaScript制作我的音乐网站(带设计报告)
    ......
  • 怎么用HBuilderX打包多客陪玩公众号小程序系统源码前端
    需要准备东西如下(​​​​​​​开源版源码下载):1.uniapp账号:用于创建应用appID,方便管理和发行自己的内容2.下载多客线上线下陪玩系统源码,解压并导入到HB开发工具3.修改配置文件siteinfo(自己域名)  manifest(平台参数)4.发行PC或H5、web网页5.导入打包好的陪玩软件前端代码......
  • [经典] 前端js将文件流导出为csv/excel文件
    前端将文件流导出为csv/excel文件有两种方式:1.后端直接返回文件连接:前端正常请求,后端返回一个静态文件链接,直接使用:window.location.href=url简单,但是缺点是耗资源,后端需要把数据转化为excel存起来,并且直接暴露连接。2.后台返回二进制流:前台请求后台接口拿到二进制流转......
  • 【前端】Typescript从入门到进阶
    以下是TypeScript的常用知识点总结,涵盖了从基础到入门的内容,并配有代码示例:1.TypeScript基础 1.1安装和配置安装TypeScript并初始化配置文件:npminstall-gtypescripttsc--init 1.2基本类型TypeScript提供的基本类型有`number`、`string`、`boolean`、`......
  • 前端技术对html中块级元素的学习
    块级元素目录块级元素列表元素有序列表无序列表自定义列表列表元素有序列表在HTML中,标签用来表示有序列表。有序列表之间的内容有先后顺序之分,例如菜谱中的一系列步骤,这些步骤需要按顺序完成,这时就可以使用有序列表。我们来看一个简单的实例:<!DOCTYPEhtml><htmllang......
  • 前端笔记1-vue:路由相关内容
    文章目录文章目录文章目录前言一、路由器工作模式1、hash模式2、history模式二、to的两种写法及命名路由1、to的写法1:字符串形式2、to的写法2:对象形式3、命名路由三、嵌套路由四、路由传参1、查询参数(query)(1)、在组件中接收参数(2)、使用<......