闭包的实际运用防抖

防抖:当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,
如果设定的时间到来之前,又一次触发了事件,就重新开始 延时。
(如果在一段时间内,又触发了该事件;就重新开始 延时)
主要运用
1==>在用户输入,进行搜索时可以使用防抖
2==>射击游戏中的mousedown、keydown事件
3==>搜索,结束后n秒后才进行搜索;n秒内,又输入就重新计时
3==>echarts的resize函数的底层就有防抖
节流:在规定时间内,保证执行一次该函数。

将函数调用赋值给变量;此时函数已经执行了一次哈

你认为test函数有没有被执行
<script>
function test() {
console.log('我是被执行了一次的');
}
let aa = test();
</script> 已经执行了
//将函数调用赋值给变量;此时函数已经执行了一次哈
<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head> <body>
<input type="text" id="input">
<script>
function debounce(func, delay) {
console.log(1)
let timer;
return function (args) {
clearInterval(timer);
timer = setTimeout(function () {
// 在delay秒内执行某一个func事件;
func(args)
}, delay)
}
} function inputFunction(val) {
console.log(`你输出的结束是${val}`);
} //此时的防抖函数已经被执行过一次了;在赋值的过程中;
const debouceInput = debounce(inputFunction, 500); const input = document.getElementById("input");
input.addEventListener('keyup', function (e) {
debouceInput(e.target.value)
})
</script>
</body> </html>

我的第二个防抖函数

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head> <body>
<input type="text" >
<input type="submit" id="input" value="按钮">
<script>
const btn = document.getElementById("input");
btn.addEventListener('click', debounce(submit,2000),false)
function submit(){
console.log('点击了')
}
function debounce(func,timer) {
var t=null;
return function(){
var fristTimer=!t;
if(t){
clearTimeout(t)
}
if(fristTimer){
func.apply(this,arguments)
}
t=setTimeout(()=>{
t=null;
},timer)
}
}
</script>
</body>
</html>

这两个防抖函数的说明

第一个防抖函数的缺点是第一次进入该函数。
就会被执行
显然这样是不好的
所以我写了第二个防抖函数。就不会已进入就会被执行了

在vue3中防抖函数的使用

在src下创建utils.js文件

代码如下
export function debounce(func,timer) {
var t=null;
return function(){
var fristTimer=!t;
if(t){
clearTimeout(t)
}
if(fristTimer){
func.apply(this,arguments)
}
t=setTimeout(()=>{
t=null;
},timer)
}
} 在某一个文件中使用
<template>
<div>
<button @click="handerClick">按钮</button>
</div>
</template>
<script>
import { debounce } from "@/utils.js"
export default {
setup () {
const handerClick=debounce(()=>{
// 你需要做的业务逻辑
console.log('防抖在2s内触发');
},2000)
return {
handerClick
}
}
}
</script>
  节流:
当持续触发事件的时候,
保证在一段时间内,只调用一次事件处理函数;
点击王者荣耀回城的时候,就需要使用节流哈~ 典型就是:
鼠标不断点击触发;规定在n秒内多次点击只有一次生效

节流函数在vue3中的使用

utils.js文件下的内容

// 节流函数的使用
export function throttle(func, delay) {
var begin = 0;
return function () {
var cur = new Date().getTime();
if (cur-begin>delay) {
func.apply(this, arguments)
begin=cur
}
}
} vue3 需要的页面使用
<template>
<div>
<button @click="handerClick3">节流函数的使用</button>
</div>
</template>
<script>
import { throttle } from "@/utils.js"
export default {
setup () {
const handerClick3=throttle(()=>{
// 你需要做的业务逻辑
console.log('防抖在2s内触发kkkkkkkkk');
},3000)
return {
handerClick3,
}
}
}
</script>

关于Js debounce(防抖)函数和throttle(节流)小结的更多相关文章

  1. js实现防抖函数和节流函数

    防抖函数(debounce) 含义:防抖函数指的是在特定的时间内没有再次触发,才得以进行接下来的函数运行: 用途:当window.onresize不断的调整大小的时候,为了避免不断的重排与重绘,可以用 ...

  2. 详解防抖函数(debounce)和节流函数(throttle)

    本文转自:https://www.jianshu.com/p/f9f6b637fd6c 闭包的典型应用就是函数防抖和节流,本文详细介绍函数防抖和节流的应用场景和实现. 函数防抖(debounce) 函 ...

  3. Javascript中 节流函数 throttle 与 防抖函数 debounce

    问题的引出 在一些场景往往由于事件频繁被触发,因而频繁地进行DOM操作.资源加载,导致UI停顿甚至浏览器崩溃. 在这样的情况下,我们实际上的需求大多为停止改变大小n毫秒后执行后续处理:而其他事件大多的 ...

  4. js高阶函数应用—函数防抖和节流

    高阶函数指的是至少满足下列两个条件之一的函数: 1. 函数可以作为参数被传递:2.函数可以作为返回值输出: javaScript中的函数显然具备高级函数的特征,这使得函数运用更灵活,作为学习js必定会 ...

  5. 【javascript】js中的函数节流和函数防抖

    一.概念解释  函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段.  大家大概都知道旧款电视机的工作原理,就是一行行得扫描出色彩到屏幕上,然后组成一张张图片.由于肉眼只能分辨出一定频率的变 ...

  6. JS奇淫巧技:防抖函数与节流函数

    应用场景 实际工作中,我们经常性的会通过监听某些事件完成对应的需求,比如: 通过监听 scroll 事件,检测滚动位置,根据滚动位置显示返回顶部按钮 通过监听 resize 事件,对某些自适应页面调整 ...

  7. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

  8. JS节流和防抖函数

    一. 实现一个节流函数 // 思路:在规定时间内只触发一次function throttle (fn, delay) {  // 利用闭包保存时间  let prev = Date.now()  re ...

  9. js节流与防抖函数封装

    js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...

  10. throttle(节流函数) 与 debounce(防抖动函数)理解与实现

    我们会对一些触发频率较高的事件进行监听,(如:resize scroll keyup事件) 如果在回调里执行高性能消耗的操作(如反复操作dom, 发起ajax请求等),反复触发时会使得性能消耗提高,浏 ...

随机推荐

  1. 查询速度最高提升50倍!火山引擎ByteHouse在广告投放领域实践分享

     更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   据QuestMobile报告显示,移动互联网已经进入了下半场,在使用人数和使用时长方面已经没有明显增长,互联 ...

  2. 智能学习灯赛道竞争日趋激烈 火山引擎 VeDI 用数据技术助力打造新优势

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 智能学习灯的赛道正变得越来越拥挤. 2021 年 3 月 2 日,腾讯教育联合暗物智能科技联合发布"AILA 智 ...

  3. Axure 自定义元件库

    点击文件 -> 新建元件库 可以添加多个元件,并将期重命名 保存元件库 新建页面 添加元件,选择自建的元件库 导入后就会发现我的原件库 这样就可以使用我们自定义的元件库了

  4. 《Flask Web 开发指南 pt.1》

    最近在看辉哥的<Flask Web 开发实战>,这才有了<Flask Web 开发指南>系列的文章,偏向学习笔记多一点,也有实战的内容 看下这个系列的文章我能写多少篇 :) 愚 ...

  5. UVA - 10935:Throwing cards away I (简单模拟)

    题目大意 桌上有一叠牌,自上而下编号为1~n.若桌上牌数大于1张,那么丢弃一张顶部牌后,再将现在的顶部牌移到最后.要求给出模拟过程和最终剩余的牌号 思路分析 典型队列模拟,丢弃即出队,移到最后即入队, ...

  6. AISing Programming Contest 2021(AtCoder Beginner Contest 202) 简单题解记录

    补题链接:Here A - Three Dice 水题,问给定三次摇色子的正面,请问3次结果以后相对面的点数和 cout << (21 - a - b - c) << &quo ...

  7. CodeForces - 651A Joysticks ( 不难 但有坑 )

    正式更换编译器为: VS Code 如何配置环境:click here 代码格式化工具:clang-format A. Joysticks 题目连接: http://www.codeforces.co ...

  8. HashMap非线程安全到底有什么问题

    HashMap是Java中常用的数据结构,用于存储键值对,并且提供了快速的查找和插入操作.下面挖掘一下HashMap内部的架构设计思维: 哈希函数的设计: HashMap使用哈希函数将键映射到数组索引 ...

  9. 体验有礼 | 1 分钟 Serverless 极速部署个人网盘,真网盘真好用!

    你想自己搭一个无敌好用的网盘吗? 想 接着看,还有奖品呢! -- 当前,网盘几乎已成为现代人的标配,而市面上的网盘功能.费用各异,让用户们陷入了对比价格和功能的迷阵中.别对比了,动手吧!作为对存储.流 ...

  10. 机器学习-概率图模型系列-隐含马尔科夫-维特比算法解码隐藏序列-HMM模型参数估计-36

    目录 待补充 参考资料 刘建平博客 pinard