节流防抖是为了解决JS事件高频率触发问题而设计的一种方法
节流:一个事件周期内,如果一个事件频繁触发,只运行一次(以次数为限制)
防抖:一个事件周期内,如果一个事件频繁触发,只运行上一个时间周期的一次触发(以时间周期为限制)
*****
节流-例:
<body>
<h2>节流</h2>
<span id="count">0</span>
<button id="btn"type="button">click</button>
</body>
<script>
var btn document.getElementById("btn");
var count document.getElementById("count");
//string Number Boolean(包装类)
btn.onclick =thowttle(sum,2000) // sum-要执行的方法;2000-执行周期
//----正常触发----
function sum(){
//count.innerHTML=Number(count.innerHTML)+1
count.innerHTML=
+count.innerHTML+1
}
//----节流:2000ms内只触发一次----
function thowttle(callback,delay){
var lastTime =0;
return function(){
var currentTime=new Date().getTime()
if(currentTime-lastTime >delay){
callback();
lastTime=currentTime
}
}
</script>
*****
防抖
//onchange-表单元素发生变化并失焦时触发
//oninput-表单元素发生变化时触发
<body>
<h2>防抖</h2>
<input id="keyword" type="texture">
</body>
<script>
var keyword=document.getElementById("keyword");
var timeid=false
keyword.οninput=function(){
if(timeid){
clearTimeout(timeid)
}
timeid=setTimeout(()=>{
console.log(this.value)
},2000)
}
</script>