在开发中,常常会去监听滚动事件或者用户输入框验证事件,如果事件处理没有频率限制,会加重浏览器的负担,影响用户体验感。

因此可以采取防抖(debounce)和节流(throttle)来处理,减少调用事件的频率,达到较好的用户体验。

防抖(debounce):

一:html中

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


<body><div class="box" id="container"><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p><p>防抖演示</p></div>
</body>
<script>function debounce(fn, wait) {var timeout = null; // 使用闭包,缓存变量return function () {if (timeout !== null) {console.log('清除定时器啦')clearTimeout(timeout); //清除这个定时器}timeout = setTimeout(fn, wait);}}// 处理函数function handle() {console.log('触发函数');}var container = document.getElementById('container')container.addEventListener('scroll', debounce(handle, 1000));
</script>

当连续触发scroll事件时,handle函数只会在1秒时间内执行,如果继续滚动执行,就会清除定时器.

二.在Vue中使用函数防抖实现输入框搜索

1.新建debounce.js

/*** 函数防抖*/
export function debounce(fn, delay) {// 记录上一次的延时器var timer = null;var delay = delay || 200;return function() {var args = arguments;var that = this;// 清除上一次延时器clearTimeout(timer)timer = setTimeout(function() {fn.apply(that,args)}, delay);}
}

2.在vue组件中引用

import {debounce} from '@/utils/debounce.js

3.在组件中使用

<template><div class="white-search-bar"><div class="search-bar-item"><span class="iconfont icon-search"></span><input class="search-bar-input" type="text" placeholder="应用搜索" v-model="keyword" @keyup="appSearch"></div></div>
</template>
<script>
import {debounce} from '@/utils/debounce.js'
export default {name: "debounce",data() {return {keyword:''};},methods: {appSearch:debounce(function(){console.log(11)})},
};
</script>

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

实现原理:函数防抖的基本思想是设置一个定时器,在指定时间间隔内运行代码时清除上一次的定时器,并设置另一个定时器,直到函数请求停止并超过时间间隔才会执行

使用场景:文本框输入搜索(连续输入谜面多次请求接口)

防抖:是只执行最后一次,

节流:是控制执行次数

节流(throttle):

定义:规定在一个单位时间内。只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效。典型案例:鼠标不断点击触发,规定n秒内多次点击只有一次生效

实现原理:用时间戳来判断是否已到回调该执行时间,记录上次执行的时间戳。然后每次触发scroll事件执行回调,回调中判断当前事件戳距离上次执行时间戳的间隔是否已经到达规定时间段,如果是,则执行,并更新上次执行的时间戳

使用场景:resize,scroll

function throttle(fn,delay){let flag=truereturn function(){if(flag){setTimeout(()=>{fn.call(this);flag=true},delay)}flag=false;}
}

防抖节流理解与应用场景相关推荐

  1. 戏说前端 JavaScript 之『防抖节流』基础知识

    往事不堪回首 犹记在很久之前的某次面试中,和那技术大哥谈的正欢呢,冷不防他来了句:谈一谈防抖和节流吧. 抹了把凉汗,我用颤抖的.不自信的语气回答道:呃,防抖就是应该是防止抖动的意思,节流大概是节省流量 ...

  2. 什么是防抖 ?什么是节流 ?以及应用场景

    文章目录 1.防抖是什么 ?什么是节流 ?以及应用场景 2.先来看防抖代码 3.节流 1.防抖是什么 ?什么是节流 ?以及应用场景 先解释下什么是防抖,防抖就是当触发一个事件不会立即执行,会等待 n ...

  3. vue 接口节流_vue防抖节流之v-debounce--throttle使用指南

    最新封装了一个vue防抖节流自定义指令,发布到npm上,有用欢迎star,谢谢! 使用比较简单,取消利用vue注册事件,采用指令来注册事件,防抖指令v-debounce,节流指令v-debounce, ...

  4. Javascript防抖函数节流函数的介绍(最详细)、彻底搞懂防抖节流的区别以及使用第三方库的防抖节流函数

    文章目录 1.防抖节流函数介绍 1.1 认识防抖节流函数 1.2 认识防抖函数 1.3 防抖函数应用 1.4 认识节流函数 1.5 节流函数应用 1.6 生活中的例子 2.Underscore库 2. ...

  5. 前端性能优化经典:javascript防抖节流

    ​ 大家好,我是前端岚枫,一枚二线城市的程序媛,今天主要跟大家分享我整理的前端的一些性能优化,js防抖节流,它是项目比较常见的性能优化方案,也是面试中常遇到的问题.希望下面文章对大家有所帮助. 我们在 ...

  6. lodash防抖节流

    应用场景: 当用户高频率的触发事件,事件较短,内部出现卡顿现象 解决方法: 防抖节流 防抖节流功作用: 主要目的是为了降低高频事件触发,减少dom操作或请求次数,提升性能 防抖函数debounce 使 ...

  7. 【从基础概念到手写】防抖-节流函数的基本实现和补充

    文章目录 前言 防抖函数 概念和应用场景 手写实现防抖函数 节流函数 概念和应用场景 手写实现节流函数 前言 防抖和节流函数是我们在平常开发的时候,比较常用的两个工具函数,使用防抖和节流函数可以提高我 ...

  8. 自然语言理解属于计算机应用的那个范畴,基于自然语言理解的3D场景构造研究-计算机应用技术专业论文.docx...

    汕头大学硕士学位论文基于 汕头大学硕士学位论文 基于自然语言理解的 3D 场景构造 I I 摘要 自然语言自动生成三维场景可以减少手工构建所耗费的人力物力,为了减少这些消 耗,国内外的很多学者对这方面 ...

  9. 防抖 节流_【前端面试】节流与防抖

    我们用两张图表示什么是节流和防抖. 防抖 节流 由图可见,防抖的意思是,当用户在一段时间内连续频繁的试图执行一个函数的时候,只有最后一次,函数被真正的执行.节流的意思是,当用户在某一个时刻执行了一次函 ...

最新文章

  1. WebService相关
  2. React native 浏览器调试
  3. 【剑指offer】反转链表,C++实现(链表)
  4. 固定顶部指定div不滑动
  5. dataframe scala 修改值_python – 使用Scala的API替换DataFrame的值
  6. FPGA开源IP核下载opencores.org
  7. linux多媒体功能,Ubuntu 8.04中文强化版 多媒体功能更强大
  8. gsettings set org.gnome.desktop.interface scaling-factor 2无效果
  9. 帮同学的忙,随意写了个课程设计(关于循环双向列表)
  10. brew 安装pip_pip brew wget 安装
  11. java 权限访问共享文件夹_在Java程序中读写windows共享文件夹
  12. SVC vs SVR
  13. 将pdf文件转换成word,csv文件
  14. Java基础系列:switch+enum
  15. 工作一年的心得体会(持续中.......)
  16. iPhone x 解决启动图适配上下黑边的问题(排除所有其他原因后,发现是图片尺寸问题)
  17. STM32处理器定时器分析(实现一个定时中断)
  18. 小米、腾讯齐升空 无人机产业隐患多
  19. IP数据报的分片和重组
  20. plustoken——区块链钱包价值不可估量

热门文章

  1. java实现第五届蓝桥杯幂一矩阵
  2. 三电技术(电池(BMS)、电驱(MCU)、电控(VCU))
  3. 三生诀游戏服务器维护,《三生诀》7月26日更新公告
  4. throttle debounce节流防抖(uniapp)
  5. 深入场景,产融智合驱动金融业务智慧升级
  6. 信息科学前沿 计算机,计算机科学前沿热点及发展趋势.doc
  7. 投票 | 给烤仔一个和星球君一起胖的机会吧
  8. 2048小游戏(附源码)
  9. 计算矩形面积的程序python_python实现用类读取文件数据并计算矩形面积
  10. UCI银行营销数据集--数据集不平衡