前端面试题:防抖节流

防抖节流的实现

防抖

当连续触发事件的时候,事件不会持续触发,当一定时间内没有触发事件后,事件函数才会执行。
实现防抖函数用到闭包。
以下是防抖函数`

<input id="input">
var inp = document.getElementById("input")
<script>
//防抖函数的主体
//func是事件触发后调用的函数体
//time设定多久没有触发事件后开始调用事件函数
function debounce (func,time) {
 	let timer
 	return function fun () {
 		 clearTimeout(timer)//如果不适用闭包的话,此时的timer是undefined
 		 timer = setTimeout(function () {
 		  	func()
 	 	 },time)
 	 }
}
//定义事件触发后调用的函数体
function func () {
 	console.log("事件触发")
 }
//此时debounceInput是fun
var debounceInput = debounce(func)
//定义键盘事件
btn.onkeyup = function () {
 	debounceInput ()
 }
</script>

此时连续按下键盘在控制台并不会输出,当按下键盘并持续一定时间内没有再按下键盘,事件函数才被触发,运用到闭包在全局中访问局部变量的技术

节流

与防抖相似,同样运用到闭包
什么是节流?
当持续触发事件时,保证一段时间内,只调用一次事件处理函数`

<button id = "btn">点击<button>
<script>
var btn = document.getElementById('btn')
//节流函数主体,在两秒内持续触发事件,只调用一次事件处理函数
    function throttle (func){
        let timer
        return function (){
          if(!timer){
              timer = setTimeout(function (){
                  timer = null
                  func()
              },2000)
          }
        }
    }
    //事件处理函数
    function handleClick () {
        console.log("事件触发")
    }
    var todoThrottle = throttle(handleClick)
    btn.onclick = function (){
        todoThrottle()
    }
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值