JavaScript高频使用之防抖与节流
发布日期:2021-05-15 00:08:49 浏览次数:15 分类:精选文章

本文共 1357 字,大约阅读时间需要 4 分钟。

防抖节流

一、防抖

1. 防抖说明

概念:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。。

通俗:乘客坐公交车(触发事件),乘客上公交车10秒钟后出发(执行事件监听器),这时如果有人上公交车(在10秒内再次触发该事件),再等10秒再出发(重新计时)。

2. 应用场景

  1. 给按钮加函数防抖组织表单多次提交
  2. 对于输入框连续输入进行验证请求时,用函数防抖能有效减少请求次数
  3. 判断scroll是否滑倒底部,滚动事件+函数防抖

3. 防抖原理

1. 为什么会引起抖动?

用户在input框输入,监听的input事件输入框内容发生改变就触发绑定的回调函数,回调函数加入异步请求,在用户未完全输入完成,执行多次回调请求。既耗时又影响性能。

2. 如何防抖?

input抖动太灵敏,执行回调次数过于频繁,思路就是降低请求频率。原理:在输入内容时不立即执行,而是延时触发回调函数的执行。如果继续输入,则上次的不再执行。

4.实现代码

代码实现

      
Document

防抖Demo

数据显示列表

    一、节流

    1. 节流说明

    概念:规定一个单位时间,在单位时间内,只能触发一次事件的回调函数,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

    通俗:我们知道目前的一种说法是当 1 秒内连续播放 24 张以上的图片时,在人眼的视觉中就会形成一个连贯的动画,所以在电影的播放(以前是,现在不知道)中基本是以每秒 24 张的速度播放的,为什么不 100 张或更多是因为 24 张就可以满足人类视觉需求的时候,100 张就会显得很浪费资源。

    2. 应用场景

    1. 重新调整浏览器窗口大小(resize)
    2. 浏览器页面滚动(scroll)
    3. 鼠标移动(mousemove)

    3. 实现代码

    // 第一种var text = document.getElementById('write');function trol(fn,delay){       var pre = new Date();    return function () {           var now = new Date();        if(now-pre >= delay){               fn();            pre = new Date();        }    }}function write(){       console.log(text.value);}text.addEventListener('input',trol(write,5000))

    第二种

    throttle
    上一篇:JavaScript算法------计算出现频率最高的元素及数量
    下一篇:项目场景-------滚动条横向竖向同步滚动

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月14日 11时10分14秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章