防抖节流的含义使用场景及js实现原理
<script>
//防抖函数
function debounce (f, wait) {
//设置一个定时器
let timer;
return (...args) => {
//单位时间内再次点击将把未来的发生的点击事件扼杀在摇篮之中,并重新计时,类似中断回城
clearTimeout(timer)
timer = setTimeout(() => {
f(...args)
}, wait)
}
}
let count = 0;
let divEl = document.getElementById("submitBtn");
//真正执行的请求时间
function moveFn(){
console.log('ajax请求:'+count++)
}
//divEl.addEventListener("click", moveFn,false)
divEl.addEventListener("click", debounce(moveFn, 3000));
</script>
function throttle(func, wait) {
// 记录上一次执行 func 的时间
let prev = 0
return function (...args) {
// 当前触发的时间(时间戳)
const now = Number(new Date())
// 只有当当前时间超过上次点击单位时长后才去执行方法func,类似在公交车站等公交
if (now >= prev + wait) {
// 符合条件执行 func 时,需要更新 prev 时间
prev = now
func.apply(this, args)
}
}
}
divEl.addEventListener("click", throttle(moveFn, 1000));
3.通俗易懂的接地气的防止重复点击的写法:
let canCLick = true
divEl.addEventListener("click",()=>{
if(canCLick){
canCLick = false
console.log('提交')
setTimeout(function(){
canCLick = true
},1000)
}
});
防抖节流的含义使用场景及js实现原理的更多相关文章
- js 防抖 节流 JavaScript
实际工作中,通过监听某些事件,如scroll事件检测滚动位置,根据滚动位置显示返回顶部按钮:如resize事件,对某些自适应页面调整DOM的渲染:如keyup事件,监听文字输入并调用接口进行模糊匹配等 ...
- js 防抖 节流
函数防抖:将几次操作合并为一此操作进行.原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置.这样一来,只有最后一次操作能被触发.( ...
- JS: 防抖节流
防抖节流 防抖(debounce) 先来看看下面的代码: //触发滚动事件,num 就加1 let num = 0; function incNum() { console.log('鼠标滚动中'); ...
- vue防抖节流之v-debounce--throttle使用指南
最新封装了一个vue防抖节流自定义指令,发布到npm上,有用欢迎star,谢谢! npm地址:https://www.npmjs.com/package/v-debounce-throttle git ...
- vue防抖节流函数---组件封装,防止按钮多次点击
1.vue 封装utils.js /** * @param {function} func 执行函数 * @param {number} time 防抖节流时间 * @param {boolean} ...
- 如何在Vue中优雅的使用防抖节流
1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...
- 【跟着大佬学JavaScript】之lodash防抖节流合并
前言 前面已经对防抖和节流有了介绍,这篇主要看lodash是如何将防抖和节流合并成一个函数的. 初衷是深入lodash,学习它内部的好代码并应用,同时也加深节流防抖的理解.这里会先从防抖开始一步步往后 ...
- v-debounce-throttle是一个vue防抖节流指令
v-debounce-throttle是一个vue防抖节流指令 简介 v-debounce-throttle是一个vue防抖节流指令,控制单一事件的触发频率.其核心是拦截组件元素的v-on绑定事件,采 ...
- js 深入原理讲解系列-Promise
js 深入原理讲解系列-Promise 能看懂这一题你就掌握了 js Promise 的核心原理 不要专业的术语,说人话,讲明白! Q: 输出下面 console.log 的正确的顺序? const ...
- js 深入原理讲解系列-事件循环
js 深入原理讲解系列-事件循环 能看懂这一题你就掌握了 js 事件循环的核心原理 不要专业的术语,说人话,讲明白! Q: 输出下面 console.log 的正确的顺序? console.log(' ...
随机推荐
- 从0开始设计_基于STM32F1的RC522读写卡
从0开始设计_基于STM32F1的RC522读写卡 1.介绍看网上很多RC522的教程都是基于读卡ID的,这个对于很多应用来说其实没有什么用,最近刚好有个项目需要读写卡,而RC522又是非常常用的且不 ...
- C# 调用C++DLL时释放非托管内存
方法一 改变非托管内存的分配方法,将其修改成采用COM的内存分配方法CoTaskMemAlloc来分配内存.这样封送拆收器在释放非托管内存时,就能自动调用COM的内存释放方法CoTaskMemFree ...
- docker安装es-header及相关问题解决
安装es-header docker pull mobz/elasticsearch-head:5 docker run --restart=always --name elasticsearch-h ...
- 搭建Spring Cloud父工程
1.首先创建一个maven项目 删除src目录,当做一级目录用来管理第三方jar版本控制. 2.配置pom文件. SpringCloud.SpringCloudAlibaba.SpringBoot版本 ...
- C++简单实现vector
向量 向量是序列容器,表示可以更改大小的数组. 就像数组一样,向量对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组一样高效.但与数组不同的是,它们的 ...
- 现代DevOps如何改变软件开发格局
在软件开发的早期,该过程通常是开发人员编写代码,再将其交给质量保证(QA)进行测试.这种瀑布开发方法可能会导致质量问题和延迟,因为问题是在周期后期发现的. 一.了解DevOps和测试左移 DevOps ...
- ET介绍——强大的MongoBson库
强大的MongoBson库 后端开发,统计了一下大概有这些场景需要用到序列化: 对象通过序列化反序列化clone 服务端数据库存储数据,二进制 分布式服务端,多进程间的消息,二进制 后端日志,文本格式 ...
- #dp#nssl 1478 题
分析 设\(f[i]\)表示第\(i\)个是否幸存,\(dp[i][j]\)表示若第\(i\)个幸存,第\(j\)个是否必死 倒序枚举人,如果存在\(dp[i][a[x]],dp[i][b[x]]\) ...
- #线段树分治,背包#CF601E A Museum Robbery
题目 有 \(n\) 个展品正在被展览,每一个展品都有一价值 \(v\) 个和一个混乱度 \(w\) ,现在有 \(m\) 次操作: 1 \(v\) \(w\) :加入一个新的展品,价值为\(v\), ...
- C++ 中的可移植性和跨平台开发
在当今软件开发行业中,跨平台开发已经成为了一种非常流行的方式.C++作为一门强大的编程语言,也被广泛应用于跨平台开发中.然而,由于不同操作系统的差异和限制,C++在不同的平台上的表现可能会有所不同.为 ...