300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > js实现输入框防抖功能

js实现输入框防抖功能

时间:2024-05-25 21:07:05

相关推荐

js实现输入框防抖功能

1.js防抖

防抖主要是用在输入框用输入输入触发一些请求,搜索一些数据,为了减少请求次数优化性能而采取的措施。

解决的问题:高频的事件操作带来了函数的多次调用影响性能。

原理:在一定的时间间隔N秒后才执行该事件,如果在N秒内又触发了该事件则重新计时。(就是你玩游戏技能有CD时间)

应用场景:

(1)输入框连续输入值后,直等到最后一次输入完才进行相关的事件操作

(2)点赞、表单提交、防止重复提交。

下面是用原生js实现一个input输入框防抖的事件,代码如下:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><input type="text" id="ipt"></body><script>//首先我们需要获取到input的输入的值function inputvalue(event) {let value = event.target.value;//获取到用户输入的值进行发送请求操作或者做其他事件操作request(value);}//第一个参数是个函数为了拿到用户输入的值,第一个参数时计时器需要等待多少秒进行, 也就是我们放完技能后几秒的cdinputvalue = debounce(inputvalue, 1000)//发送请求或者其他操作的事件function request(data) {//这个地方传递的参数就是input的输入值console.log('发送请求', data)}//现在开始进行防抖函数,只有用户输入完了在进行操作function debounce(fn, await) {//第一个参数是函数,第二个参数时等待的时间//有些人喜欢在这里进行this的切换,我感觉写不写都行//console.log(this);//这里的this指向wwindow//声明一个变量用来存放定时器,先让定时器为空进入下面的操作let timeout = null;//let _that=thisreturn function (...args) {//console.log(this);//这里的this指向当前调用者对象也就是 input//console.log(...args);//所有的打印都是为了看清到底是谁被当做参数传递进来了//这个地方用课解构es6的新特性,因为不知道会传递几个参数//因为第一次定时器为空所以不会进入,当第二次触发也就是用户在此输入的时候就不为空了//就会进入判断然后再让定时器为空,直到用户最后一次输入清除以后timeout就有值了就会执行定时器里面的操作了if (timeout) {//console.log(timeout);//就是用户输入的值,// console.log(this);//这里的this指向当前调用者对象也就是 input//如果timeout有值就清除定时器让定时器从新计时clearTimeout(timeout);}else{//这个else可有可无,看自己是否需要用户第一次输入的值去做一些操作//这个地方是使用apply改变一下this指向后面的参数就是我们传递的函数// fn.apply(this, args)}timeout = setTimeout(() => {fn.apply(this, args)}, await)}}//给input绑定上监听时间,防抖函数就完成了document.getElementById('ipt').oninput = inputvalue;</script></html>

总结:就是为了减少事件的触发,优化性能,后面会写一个vue版本

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。