JS防抖和节流

简介: JS防抖和节流

一、防抖

(1)概念:

   当持续触发事件,一定时间内没有再触发事件,事件处理函数只会执行一次,如果设定的时间到来之前又一次触发了事件,就重新开始延时。

比如点击按钮2s后调用函数,在第1.5s时又点了,则会重新开始计时,又要等2s
(2)实际应用:

使用echarts时,改变浏览器宽度的时候,希望重新渲染echarts的图像,可以用此函数提升性能(虽然echarts里有自带的resize函数) 
典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时,解决搜索的bug
<input type="text">
<script>
    let input = document.querySelector('input')
    // 防抖函数
    function debounce(delay,callback) {
        let timer;
        return function (value) {
            clearTimeout(timer);
            // 需要清除setTimeout 
            // timer变量需要一直保存在内存中(闭包)
            // 不想打印之前已经输入的结果,那就要清除以前触发的定时器
            timer = setTimeout(function () {
                // console.log(value); // 希望结果在外面输出
                callback(value)
            }, delay)
        }
    }
    function fn(value){
        console.log(value);
    }
    // 需求:键盘抬起不再输入的1s后,输入框的结果只出现一次
    let debounceFunc = debounce(1000,fn)
    input.addEventListener('keyup', function (e) {
        debounceFunc(e.target.value)
    })
</script>

二、节流

(1)概念:

    当持续触发事件的时候,保证一段时间内,只触发一次事件处理函数 

(2)实际应用:
表单的提交
典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效

<button id="button">点击</button>
<script>
    function throttle(func, wait) {
        let timerOut;
        // 相当于是在办理业务
        return function () {
            if (!timerOut) {
                // 如果timerOut有值的话就不执行
                timerOut = setTimeout(function () {
                    func();
                    // 工作人员办理完了之后,后面的不办理了
                    timerOut = null;
                }, wait)
            }
        }
    }
    function handle(){
        console.log(Math.random());
    }
    let btn = document.querySelector('#button')
    btn.onclick = throttle(handle,2000)
</script>
相关文章
|
2月前
|
前端开发 JavaScript UED
JavaScript防抖和节流的使用及区别
JavaScript防抖和节流的使用及区别
103 57
|
5月前
|
前端开发 JavaScript Java
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
【JavaScript】JavaScript 防抖与节流:以游戏智慧解锁实战奥秘
60 3
|
18天前
|
前端开发 JavaScript UED
JavaScript 中的函数防抖与节流详解及实用场景
在前端开发中,处理用户频繁触发的事件,如输入框的输入、按钮点击、窗口调整大小等,常常需要优化性能以减少无效操作。为此,函数防抖(debounce)和函数节流(throttle)是两种常见的性能优化手段。本文将详细介绍两者的区别与实现,并探讨它们的应用场景。
24 1
|
5月前
|
JavaScript 前端开发 UED
深入理解JavaScript中的节流与防抖技术
理解并合理运用节流与防抖技术,可以帮助我们优化事件处理函数的执行频率,从而提升应用的性能和用户体验。这两种技术通过减少不必要的计算和DOM操作,使得Web应用程序能够更加流畅地运行。 通过掌握防抖和节流的实现原理及应用场景,开发者可以更加灵活地编写高效且性能优化的代码,对于面对高频事件处理时尤其重要。在开发中合理选择使用防抖或节流,将直接影响到应用的响应性和效率。
53 1
|
2月前
|
JavaScript 前端开发
js防抖函数返回值问题解决方案
本文介绍了如何在JavaScript中创建一个带有返回值的防抖函数,通过结合Promise来实现。这种防抖函数可以在事件触发一定时间后再执行函数,并能处理异步操作的返回值。文章提供了防抖函数的实现代码和如何在实际项目中使用该防抖函数的示例。
24 1
|
3月前
|
JavaScript 前端开发 UED
JS 防抖与节流
防抖和节流是优化高频事件处理的技术。针对如`scroll`、`resize`等频繁触发的事件,它们能有效减少不必要的回调执行,节省资源。防抖确保在一段时间内仅执行最后一次操作,适用于输入框自动补全等场景;而节流则按固定间隔执行函数,适合拖拽、滚动事件。通过简单的JavaScript实现,可以显著提升应用性能和用户体验。
33 1
JS 防抖与节流
|
6月前
|
JavaScript 前端开发 UED
js的防抖节流
js的防抖节流
35 1
|
6月前
|
JavaScript 前端开发 UED
js的节流
js的节流
32 0
|
6月前
|
测试技术
js_防抖与节流(闭包的使用)
js_防抖与节流(闭包的使用)
42 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
85 2