ITPub博客

首页 > 应用开发 > > javascript防抖和节流

javascript防抖和节流

作者:zhjjj 时间:2019-11-04 15:42:46 0 删除 编辑

在处理高频事件的时候,类似于window的resize或者scorll,或者input输入校验等操作时。如果直接执行事件处理器,会增大浏览器的负担,轻微的会产生抖动,严重的直接卡死,用户体验非常不好,

面对这种情况,我们一般可以采用防抖和节流的方式减少调用频率。同时也不会影响实际效果。

一、防抖

防抖的作用是:在事件被触发的n秒后执行回调,如果在这n秒内又被触发,则重新计时。

常见场景:

input校验:在input输入完成后,不需进行额外操作(比如:点击按钮,或者blur事件),而是需要敲完代码通过keydown事件触发校验程序。此时如果不作处理,会导致校验程序频繁触发,影响用户体验。

此时可以使用防抖来解决这个问题。代码如下:

二、节流

节流的作用是:在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。

常见场景:

如果在一个页面中有很多张图片,就可能会使用懒加载技术,即监听滚动条的改变,而加载图片。为了避免一直触发滚动事件的处理程序,可以使用节流。

节流 demo 如下:

// 打印 scroll 的日志

function scrollLog () {

console.log('scrollLog')

}

// 节流:持续触发事件时,规定在一定时间内只会发生一次。

function throttle (fn, delay) {

var startTime = Date.now()

return function () {

var curTime = Date.now()

if (curTime - startTime >= delay) {

fn && fn()

startTime = Date.now()

}

}

}

window.addEventListener('scroll', throttle(scrollLog, 1000))

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/717/viewspace-3137903/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    231
  • 访问量
    1889