首页 > 编程语言 >javascript【应用】debounce和throttle

javascript【应用】debounce和throttle

时间:2023-01-06 22:33:38浏览次数:43  
标签:function throttle debounce app javascript 点击 num let time

debounce防抖

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时;典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时。

<div id="app">
    输入内容:<input type="text" class="input"  @keyup="deb"/>
    <div> 输入次数:{{ num }}</div>
</div>
let time
var app = new Vue({
    el: '#app',
    data: {
        num: 0,
    },
    methods: {
        deb: function () {
            let that = this
            if (time) {
                clearTimeout(time)
            }
            time = setTimeout(function () {
                that.num++
                console.log('输入了' + that.num + '次')
                time = undefined;
            }, 2000)
        }
    })

throttle节流

规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效; 典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效。

在某应用购买火车票/飞机票等商品的时候,不断地点击刷新购买,总不能一直点击一直请求吧,系统会崩掉的,所以节流就很有必要了。


<div id="app">
    <button @click="thr">点击</button>
    <div>实际点击:{{clicknumber}}</div>
    <div>有效点击:{{num}}</div>
</div>
let time
let lastTime
var app = new Vue({
    el: '#app',
    data: {
        num: 0,
        clicknumber: 0
    },
    methods: {
        thr: function () {
            this.clicknumber++
            let that = this
            let now = new Date();
            if (lastTime && now - lastTime < 2000) {
                clearTimeout(time)
            }
            time = setTimeout(function () {
                that.num++
                console.log('点击了' + that.num + '次')
                lastTime = new Date()
            }, 500)
        }
    }
})


区别

防抖动是将多次执行变为最后一次执行

节流是将多次执行变成每隔一段时间执行

标签:function,throttle,debounce,app,javascript,点击,num,let,time
From: https://www.cnblogs.com/thomerson/p/17031754.html

相关文章

  • Javascript实现右下角在线客服弹窗效果代码 - 网站网页在线客服源码教程
    如果你只想要实现右下角弹窗功能,你可以使用JavaScript库"layer"。 layer是一个开源的JavaScript库,可以帮助你快速地实现类似操作系统的弹出窗口效果。它提供了许多可......
  • JavaScript
    JavaScript1.基本语法//1.定义变量变量类型变量名=变量值;varnum=1;alert(num)//2.条件控制varscore=81;if(score>60&&score<70){alert("......
  • [JavaScript]分解url参数
    分解页面url传入参数转载:来自https://www.jianshu.com/p/6dd040f6800dfunctioninit_params(){varurl=location.search;//获取url中"?"符后的字串......
  • JavaScript 中如何拦截全局 Fetch API 的请求和响应?
    本文翻译自InterceptingJavaScriptFetchAPIrequestsandresponses拦截器是可用于预处理或后处理HTTP请求的代码块,有助于全局错误处理、身份验证、日志记录等。在......
  • JavaScript: symbol 和 string key 取值时的怪异现象
    ''做key可以被.或者[]运算符取出[""]做key同样可以被.或者[]运算符取出symbol做key只能被.取出[symbol]做key只能被[]取出......
  • WebStorm——最智能的Javascript IDE
    ​ WebStorm是什么?WebStorm是JetBrains的一个专门为Web开发人员设计的IDE,JetBrains大家应该不陌生,Resharper、IntelliJIDEA等都是出自这个公司。JetBrains给WebStorm下的......
  • JavaScript实现浏览器端大文件分片上传
    ​ 前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对Http协议较模糊,故这次采用渐进的方式来学习文件上传的......
  • JavaScript之正则表达式
    JavaScript之正则表达式search()方法&replace()1<!DOCTYPEhtml>2<html>3<head>4<metacharset="utf-8">5<title>JavaScript正则表......
  • JavaScript事件触发列表与解说
    一般事件事件浏览器支持描述onClickHTML:2|3|3.2|4Browser:IE3|N2|O3鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClickHTML:2|3|3.2|4Browser:IE4|N4|O鼠标......
  • javascript array 数组 indexOf
    javascriptarray数组indexOf低版本的array是没有indexOf的。参考链接:https://reference.codeproject.com/javascript/Reference/Global_Objects/Array/indexOf/......