浅谈 JS 的防抖和节流
2021-03-21 01:25
标签:down sha 删除 random 存在 rtc else 计算 直接 焦点事件主要用于表单元素,以及超链接,使用点击或者tab可以切换汇聚焦距,当input聚焦是触发focus,失去焦点时触发blur 文本框在输入的时候,如果每输入一次就判断一次,会造成效率太低,我们让它每间隔一段时间,再去验证。即指连续触发事件但是在 n 秒中只执行一次函数。 给 input 设置一个属性,第一次触发事件时,属性值为 false,则往下执行,500毫秒后获取 input 的值,同时删除 ids 的值;第二次输入时,当500毫秒还没到时,ids 为 true ,则直接跳出,不去获取 value 值 。在500毫秒中,只执行一次函数。 节流的定时器写法: 节流的时间戳写法: 防抖就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。 ===实现原理: 当持续触发keydown事件时,事件处理函数handle只在停止按键500毫秒之后才会调用一次,也就是说在持续触发keydown事件的过程中,事件处理函数handle一直没有执行。 节流和防抖有相似之处,我们在上面节流的基础上,该成下面的代码 防抖封装: 浅谈 JS 的防抖和节流 标签:down sha 删除 random 存在 rtc else 计算 直接 原文地址:https://www.cnblogs.com/my12-28/p/12655481.html浅谈 JS 的防抖和节流
前言:在了解防抖和节流之前,我们来认识聚焦事件和键盘事件
一、聚焦事件 (focus、blur、input)
超链接
失焦和聚焦主要用来判断表单验证
// input 输入事件主要用于文本框和多行文本框
var input=document.querySelector("input");
input.addEventListener("input",inputHandler);
function inputHandler(e){
console.log(e);
// e.data: "s" 本次输入的内容
// e.isComposing: false 输入法是否启动
// e.inputType 输入的类型
// insertCompositionText 输入插入
// historyUndo 历史返回
// insertText 插入文本
// deleteContentBackward 退格删除(删除前一个)
// deleteContentForward delete删除(删除后一个)
// deleteByCut 剪切删除
// insertFromPaste 粘贴插入
}
二、KeyboardEvent 键盘事件
1、节流
实现原理
2.防抖
keydown事件,当键盘按下时触发,如果键盘一直按下,则会一直触发这个事件,我们并不希望在事件持续触发的过程中那么频繁地去执行函数。这种情况防抖是比较好的解决方案。
function debounce(fn, wait) {
var timeout = null; //定义一个定时器
return function () {
if (timeout !== null)
clearTimeout(timeout); //清除这个定时器
timeout = setTimeout(fn, wait);
}
}
// 处理函数
function handle() {
console.log(Math.random());
}
// 侦听事件
document.addEventListener("keydown", debounce(handle, 1000));
防抖和节流的区别?