前端必会——防抖

news/2024/12/13 2:53:04/

目录

  • 前言
  • 一、什么是防抖?
  • 二、防抖解决了什么问题
  • 三、实现防抖的基本代码
  • 四、防抖的应用场景
    • 1.代码实现
    • 2.结果展示
  • 总结


前言

本文讲解一下js中防抖思想,下方有实现防抖的基本代码,可以复制到自己的编辑器看看效果哦。也有实际的应用场景,会HTML、CSS、JQuery以及使用jQuery发送Ajax请求即可。


一、什么是防抖?

防抖阻止了事件的多次调用,规定时间内只会执行一次。

二、防抖解决了什么问题

假设一个用户高频点击一个按钮,点击按钮后会向后台发送请求,如果不使用防抖,就会发送许多重复的Ajax请求,造成服务器压力。使用防抖后,规定时间内,只会发送一次Ajax请求,可以有效地减缓服务器的压力。

三、实现防抖的基本代码

通过监听输入框的输入事件,通过定时器每隔一秒获取一次用户输入的内容,如果一秒内用户又进行了输入,清除上一次的定时器,重新计时一秒,计时结束后将用户输入的内容打印到控制台。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>debounce</title></head><body><input type="text" placeholder="请输入您要搜索的内容~" /><script>let timer = null$('input').on('input',function(){console.log('没有防抖',$('input').val())// 向清除一次定时器clearTimeout(timer)// 重新开启一个定时器timer = setTimeout(() => {// 如果input输入框的值为空,就终止执行后面的代码if(!$('input').val()) returnconsole.log('加了防抖后',$(this).val())}, 1000);})// $('input').on(//   'input',//   debounce(function () {//     if (!$(this).val()) return//     console.log($(this).val())//   })// )// // 封装代码,提高代码的复用性// function debounce(fn) {//   let timer = null//   return function () {//     clearTimeout(timer)//     timer = setTimeout(() => {//       // 这里的 this 指向 window//       // 通过 call() 方法改变this的指向//       fn.call(this)//     }, 1000)//   }// }</script></body>
</html>

四、防抖的应用场景

想必大家平时都有逛购物网站的习惯,当我们在搜索框搜索某件商品时,只要输入关键字就会在搜索框下出现对应的联想列表。但是联想列表不是实时展示的,可以延迟500毫秒或者1秒,将用户输入的关键字通过Ajax请求提交给后台,当得到后台服务器响应后,再将联想列表展示给用户。这样的操作大大地减少了对服务器的请求压力,延迟适当的时间,也可以让用户有足够的时间将想要搜索的关键字写完整。

1.代码实现

代码如下(示例):

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>防抖</title><style>* {margin: 0;padding: 0;}div {width: 500px;margin: auto;}.box {margin-top: 200px;width: 500px;height: 35px;border: 1px solid #ccc;border-radius: 8px;overflow: hidden;}a {text-decoration: none;color: #fff;width: 60px;height: 100%;line-height: 35px;text-align: center;background-color: steelblue;}.fl {float: left;}.fr {float: right;}input {padding-left: 20px;width: 418px;height: 100%;border: 0;outline: none;}.list {display: none;width: 500px;border: 1px solid #ccc;border-top: none;border-radius: 8px;}li {list-style: none;padding-left: 30px;height: 30px;line-height: 30px;border-bottom: 1px solid #ccc;}li:last-child {border-bottom: none;}</style></head><body><div class="box"><input type="text" class="fl" placeholder="请输入您要搜索的内容~" /><a href="javascript:;" class="fr">搜索</a></div><div class="list"><ul></ul></div><script src="./jquery-3.5.1.min.js"></script><script>let timer = null// 给input输入框绑定input事件$('input').on('input', function () {clearTimeout(timer)timer = setTimeout(() => {// 如果输入框的内容为空,就终止代码的执行if (!$(this).val()) returnlet kw = $(this).val()// 发送Ajax请求$.ajax({type: 'GET',url: 'http://www.liulongbin.top:8000/v1_0/suggestion?q=' + kw,success: function (res) {// 判断服务器返回的结果,如果没有内容弹框提示并终止后续代码执行if (res.data.options.length === 0) {alert('暂时没有搜索结果~')$('input').val('')return}// 遍历服务器返回的数据res.data.options.forEach(item => {// 将每一项追加到ul列表中$('.list ul').append(`<li>${item}</li>`)})// 展示联想列表$('.list').show()}})}, 1000)// 隐藏联想列表展示并清空ul内的内容$('.list').hide().find('ul').empty()})</script></body>
</html>

2.结果展示

在这里插入图片描述


总结

本来想给大家做一个GIF动图展示的,但是没有找到软件,感兴趣的小伙伴可以复制代码到自己的编辑器运行看下效果。如果觉得对你有帮助的话,辛苦点赞支持一下~三克油


http://www.ppmy.cn/news/480340.html

相关文章

防抖云台-鸡头稳定 简介篇

概念 EIS Electronic Image Stabilization 电子图像防抖 AIS (HUAWEI) AI Image Stabiliza 华为AI防抖 OIS Optical Image Stabilization 光学图像防抖 简介 Chicken Head Tracking 视频 原理 转自 松鼠会 与 果壳 当鸽子抬起后脚往前走&#xff0c;重心随着身体紧跟…

图像视频防抖

视频防抖 该项技术关键字挺多的&#xff0c;但作用都是去除视频拍摄过程中轻微抖动造成的图像模糊。 Anti-Shake&#xff0c;Shake-proof, imagestabilization都是这个意思&#xff0c;image stabilization是由canon最先开始这么称呼的&#xff0c;Anti-shake更通用一点。 该…

防抖、节流的介绍

目录 一、什么时候要用到防抖节流 输入框连续输入的案例 滚动条案例 二、什么是防抖、节流 使用防抖来解决输入框案例造成的浪费现象&#xff1a; 使用节流来解决滚动条案例造成的浪费现象&#xff1a; 三、总结 一、什么时候要用到防抖节流 针一类类快速连续触发和不可控…

视频防抖技术的实现

1. 介绍 视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移&#xff08;比如沿着x、y、z方向上的运动&#xff09;或旋转&#xff08;偏航、俯仰、翻滚&#xff09;。 对视频防抖的需求在许多领域都有。 这在消费者和专业摄像中是极其重…

EIS(电子稳像,视频防抖)算法开发记录

最近项目中有个小需求&#xff0c;需要对运动视频使用电子稳像算法进行稳像处理。开发从0开始&#xff0c;在此记录一下开发过程和心得&#xff0c;做个备份&#xff0c;期间也走了很多弯路&#xff0c;供大家参考。最终效果个人认为基本可媲美主流手机。先上最终效果&#xff…

光学防抖OIS介绍与标定

1.开篇直接先看一下有无OIS的效果差异 手持设备拍照时,手的抖动(点击抖动和生理抖动)会造成相机的轻微倾斜(一般在+/-0.5度以内),该倾斜引起了镜头观察角度的变化,以镜头为参照物来说,相当于被拍摄的物体移动了,因此所成的像也会在图像传感器上相对于原位置发生偏移, 结果造成图…

Camera:多帧降噪及photo、video模式下的防抖处理

今天突然遇到手机相机拍出的照片没有多帧降噪效果了&#xff0c;Tunning很多的效果调试需要基于多帧降噪进行处理&#xff0c;最后很坑爹的发现多帧降噪居然与EIS、AIS等防抖的处理有关系&#xff1b;带着满脸的黑人问号研究了一下相机的多帧降噪以及AIS、EIS的防抖处理。 1.多…

mysql时间字段根据当前时间更新

保存数据时默认值设置为当前时间 create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间;保存行数据时默认值设置为当前时间&#xff0c;同时更新字段时自动更新为当前时间 update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_T…