防抖与节流

防抖与节流

防抖

1.防抖:事件触发后n秒后再执行

<style>
    div{
        width: 100%;
        height: 300px;
        background-color: #999;
        text-align: center;
        line-height: 300px;
        color: #fff;
        font-size: 30px;
    }
</style>
<body>
	<div>0</div>
</body>

<script>
 // 获取页面元素
        var div = document.querySelector("div")
        // 定义一个变量
        var num = 1
        // 需要执行的函数
        function changNum(){
            div.innerHTML = num++
        }
        // 鼠标移上一秒后再执行
        function bounce(fn,time){
            var timer
            return function(){
                if(timer) clearTimeout(timer)

                timer = setTimeout(()=>{
                    fn.apply(this)
                },time)
            }
        }
        // div.onmousemove = changNum
        div.onmousemove = bounce(changNum,1000)
   </script>

2.防抖:事件触发立即执行,n秒后才能再次触发执行

//样式和页面代码引用上面例子
 function bounce(fn ,time){
    var timer 
     return function(){
         if(timer) clearTimeout(timer)

         var callNow = !timer

         timer = setTimeout(()=>{
             timer = null
         },time)

         if(callNow) fn.apply(this)
     }
 }
 div.onmousemove = bounce(changNum,1000)

节流

节流:连续发生的事件在n秒内只执行一次函数

1.利用setTimeout实现(消耗性能)
function throttle(fn,time){
  var timer
  return function(){
      if(!timer){
          timer = setTimeout(()=>{
              timer = null
              fn.apply()
          },time)
      }
  }
}
div.onmousemove = throttle(changNum,1000)

2.利用时间戳实行节流
function throttle(fn,time){
	var prev = 0 //记录上一次的时间
	   return function(){
	       var now = new Date()//当前时间
	       if(now-prev > time){
	           fn.apply()
	           prev = now//重置上一次时间
	       }
	   }
}
div.onmousemove = throttle(changNum,1000)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值