性能优化之防抖

news2025/1/12 17:32:13

方法1:利用lodash库提供的防抖来处理

方法2:手写一个防抖函数来处理

需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字才会变化+1

方法一:利用lodash库实现防抖

<!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>Document</title>
    <style>
        .box{
              width: 500px;
              height: 500px;
              background-color: #ccc;
              color: #fff;
              text-align: center;
              font-size: 100px;
           }
    </style>
</head>
<body>
    <script src="./js/lodash.min.js"></script>
    <div class="box"></div>
    <script>
        // 利用防抖实现性能优化
        // 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1
        const box = document.querySelector('.box')
        let i = 1
        function mouseMove(){
            box.innerHTML = i++
        }
        // mousemove鼠标移动事件
        // 鼠标一移动就500ms后就触发debounce事件,i就++
        // _.debounce语法(fun,时间)
        box.addEventListener('mousemove', _.debounce(mouseMove,500))
    </script>
</body>
</html>

方法二: 手写一个防抖函数来处理

思路:

        核心是利用setTimeout定时器来实现

        1声明定时器变量

        2每次事件触发时都要先判断是否有定时器,如果有先清除以前的定时器

        3如果没有定时器则开启定时器存入到定时器变量里面

        4定时器里面写函数调用

<!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>Document</title>
    <style>
        .box {
            width: 500px;
            height: 500px;
            background-color: #ccc;
            color: #fff;
            text-align: center;
            font-size: 100px;
        }
    </style>
</head>

<body>
    <div class="box"></div>
    <script>
        // 利用防抖实现性能优化
        // 需求:鼠标在盒子上移动,鼠标停止500ms之后,里面的数字就会变化+1
        const box = document.querySelector('.box')
        let i = 1
        function mouseMove() {
            box.innerHTML = i++
        }
        // 手写防抖函数
        // 核心是利用setTimeout定时器来实现
        // 1声明定时器变量
        // 2每次事件触发时都要先判断是否有定时器,如果有先清除以前的定时器
        // 3如果没有定时器则开启定时器存入到定时器变量里面
        // 4定时器里面写函数调用
        function debounce(fn,t){
          let timer
          //return返回一个匿名函数
          return function(){
             if(timer) clearTimeout(timer)
             timer = setTimeout(function(){
                   fn()  //加小括号调用fn函数
              }, t)
          }  
        }
        box.addEventListener('mousemove',debounce(mouseMove,500))
        // 有括号的函数会直接执行的不用鼠标滑动,所以当鼠标滑动时需要有一个return
    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

队列(JAVA)

队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出的性质。 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队头 在JAVA中队列和栈不同Stack是一个类&a…

Android gradle dependency tree change(依赖树变化)监控实现

文章目录 前言基本原理执行流程diff 报告不同分支 merge 过来的 diff 报告同个分支产生的 merge 报告同个分支提交的 diff 报告 具体实现原理我们需要监控怎样的 Dendenpency 变化怎样获取 dependency Treeproject.configurations 方式./gradlew dependenciesAsciiDependencyRe…

Flume最简单使用

文章目录 一、简介1、定义2、基础架构 二、快速入门1、解压Flume2、案例一&#xff1a;监控端口号3、案例二&#xff1a;将空目录下文件 三、Flume进阶1、Flume事务2、Flume Agent内部原理3、案例一&#xff1a;监控日志4、案例二&#xff1a;多路复用和拦截器适应4.1 原理4.2 …

web:[极客大挑战 2019]Http

题目 点进页面显示为 浏览了这个网站的页面发现没有什么提示信息 查看源代码 发现一个secret.php&#xff0c;点进去访问 点进页面显示为不知道是从如图所示的网址来&#xff0c;所以需要抓包修改Referer头为https://Sycsecret.buuoj.cn Referer必须得在Connection上方&#…

web:[极客大挑战 2019]Havefun

题目 点进页面&#xff0c;页面显示是一只猫&#xff0c;没有其他的提示信息 查看网页源代码&#xff0c;划到最后 这段php代码包含了通过get方式的提交信息 构造payload&#xff1a; http://aaf4c4b5-7bf2-404f-8bf5-f6e97d830b72.node4.buuoj.cn:81/?catdog 即得到flag f…

BUUCTF 不一样的flag

题目&#xff1a;BUUCTF 不一样的flag 看的这个&#xff1a;BUUCTF 不一样的flag_Afanbird的博客 先查&#xff0c;没壳&#xff0c;32位&#xff0c;打开 ida分析&#xff0c;嗯&#xff0c;啥也看不出来&#xff0c;v12345什么的非常混乱 突破口是这两句 发现49是1&#xf…

Ps 在用鼠标滚轮缩放图片时,速度太快?

1.原因 在于安装了第三方鼠标优化软件Mos&#xff0c;它起着对第三方鼠标全局浏览效果的优化&#xff0c;使浏览更加顺滑&#xff0c;而不精确&#xff0c;消除了mac使用第三方鼠标浏览页面时的卡顿问题。这也使得像ps、ai这类软件&#xff0c;在进行页面缩放时&#xff0c;变得…

面向面试知识-消息队列

面向面试知识-消息队列 参考文章&#xff1a;消息队列&#xff08;mq&#xff09;是什么&#xff1f;、重复消费 老坑还没填完&#xff0c;就又开一个新坑&#xff1a; Rocket MQ&#xff1b;Message Queue。 起始问题 为什么引入MQ&#xff1f;MQ适用于哪些场景下的哪些问题…

4 vCPU 实例达成 100 万 JSON API 请求/秒的优化实践

“性能工程” &#xff08;Performance engineering&#xff09;是个日渐流行的概念。顾名思义“性能工程”是包含在系统开发生命周期中所应用的一个技术分支&#xff0c;其目的就是确保满足非功能性的性能需求&#xff0c;例如&#xff1a;性能、可靠性等。由于现代软件系统变…

wifi分销大师小程序v4.0.5独立版saas系统源码+前端

WiFi大师是一款专为商家店内用户设计的WiFi连接小程序。它的出现有效解决了商家在为客户提供WiFi服务的过程中遇到的各种问题&#xff0c;为消费者提供了更加高效快捷的上网方式。 除此之外&#xff0c;WiFi大师小程序还为商家提供了一些额外的功能&#xff0c;例如店铺优惠券…

2023年蓝帽杯取证复现

案件介绍 2021 年 5 月&#xff0c;公安机关侦破了一起投资理财诈骗类案件&#xff0c;受害人陈昊民向公安机关报案称其在微信上认识一名昵称 为 yang88 的网友&#xff0c;在其诱导下通过一款名为维斯塔斯的 APP &#xff0c;进行投资理财&#xff0c;被诈骗 6 万余万元。接警…

84、Redis客户端-->可视化图形界面工具(Another Redis Desktop Manager)的下载、安装及初步使用

Redis客户端–>可视化图形界面工具(Another Redis Desktop Manager)的下载、安装及初步使用 ★ Redis客户端&#xff1a; ▲ Redis自带的命令行工具&#xff08;简陋&#xff09;&#xff1a; CLI工具&#xff0c;重新打开一个命令行窗口&#xff0c;在其中输入如下命令&…

5请求处理流程

产品代码都给你看了&#xff0c;可别再说不会DDD&#xff08;五&#xff09;&#xff1a;请求处理流程 # 这是一个讲解DDD落地的文章系列&#xff0c;作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云&#xff08;https://www.…

APP产品经理的主要内容(合集)

APP产品经理的主要内容1 职责&#xff1a; 1.成产品的功能、流程、界面设计&#xff0c;协调设计资源落实产品交互、原型设计; 2.负责产品上线后客户反馈跟踪&#xff0c;并根据产品规划策略和客户反馈优先级落实产品改进设计计划&#xff0c;不断提升竞争力。 3.关注竞争对…

经典网络解析(三)GoogleNet | Inception块,1*1卷积核,辅助分类器 整体结构代码

文章目录 1. 串联结构VGG存在的问题2. GoogleNet结构解析2.1 Inception块2.2 最后采用平均池化操作2.3 辅助分类器 3.代码实现3.1 实现Inception块3.2 各个块依次实现 4 **贡献总结** 之前讲了 AlexNet的解析经典网络(一) AlexNet逐层解析 | 代码、可视化、参数查看&#xff01…

2021 ICPC澳门题解(8/11)

AC情况 赛中通过赛后通过暂未通过A√B○C√D-E√F√G○H-I○J-K√ 整体体验 easy&#xff1a;AKF mid&#xff1a;CEGI hard&#xff1a;DHBJ 心得 整体感觉出的题比较传统&#xff0c;严格的卡精度/卡时间 题解 A. So Ill Max Out My Constructive Algorithm Skills&…

mysql explain学习记录

参考了公司内相关博客&#xff0c;实践并记录下&#xff0c;为后面分析并优化索引做准备。 MySQL explain命令是查看MySQL查询优化器如何执行查询的主要方法&#xff0c;可以很好的分析SQL语句的执行情况。 每当遇到执行慢&#xff08;在业务角度&#xff09;的SQL&#xff0c;…

LeetCode 75-02:字符串的最大公因子

前置知识&#xff1a;使用欧几里得算法求出最大公约数 func gcdOfStrings(str1 string, str2 string) string {if str1str2 ! str2str1 {return ""}return str1[:gcd(len(str1), len(str2))] }func gcd(a, b int)int{if b 0{return a}return gcd(b, a%b) }

Leetcode刷题笔记--Hot51-60

1--环形链表II 主要思路&#xff1a; 快慢指针&#xff0c;快指针每次走两步&#xff0c;慢指针每次走一步&#xff1b; 第一次相遇时&#xff0c;假设慢指针共走了 f 步&#xff0c;则快指针走了 2f 步&#xff1b; 假设起点到环入口结点的长度为 a&#xff08;不包括入口结点…

无需root,删除安卓内置应用

今天在家里反到一台比较老的安卓手机&#xff0c;直接恢复出厂设置&#xff0c;开机后一堆自带的应用&#xff0c;卡的一匹&#xff0c;于是就想办法把内置软件卸载掉。 1、手机开启开发者模式&#xff0c;打开usb调试。 2、手机与安卓连接&#xff0c;然后执行adb devices&a…