js笔记 demo篇 (二)原生js防抖搜索框

26 篇文章 0 订阅
20 篇文章 1 订阅

防抖

什么是防抖

防抖,难道代码还会抖吗? 当然不是字面上的意思,代码又没有脑血栓。
问题:
比如有一个搜索框,我们要输入关键字搜索。要输入vue-router,然后搜索框绑定了input事件,触发后发出请求,那么会出现什么后果呢,就是每输入一个字母发送一次请求,这样就会浪费带宽,影响性能。
解决:
在input事件绑定的事件函数中,加一个定时器,如果用后在输入一段关键字后300毫秒还没有接着输入,那么发送请求,如果还继续输入则不发送。
上代码:

//html部分
<input type="text" id="search"></input>
//js部分
var oInput = document.getElementById('search');
var timer = null;
oInput.oninput = function () {
 	timer && clearTimer(timer); //注意这里是个坑,不清定时器达不到效果
	timer = setTimeout(function () {
		//...ajax 发送相应请求
	}, 300);
}

哎呦,不错哦,就这么简单,我们来封装一下:

function debounce(fun, time) {
	 var timer = null;
	 return function () {
	     var inp = this;
	     clearTimeout(timer);
	     timer = setTimeout(function () {
	         fun.call(inp);
	     }, time)
	 }
 }
 //调用方式
 // 参数fun为事件处理函数
 //time为事件延迟时长
 element.oninput = deboince(function () {
	//这里可以请求数据
 }, 300)//如果300不继续输入则发送请求

ok我们来把这么封装的小功能应用一下呗,这里写了个小demo,数据是模拟的没有和后台接通,有按钮筛选,和关键字筛选功能,防抖功能。
搜索框没有进行首字母筛选哦。

防抖搜索框demo展示地址:http://www.fgdemoshow.cn/smallDemo/js/searchBox
gitHub地址:https://github.com/lifei5859/search-box
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值