JS中手撕防抖函数和节流函数

news2024/11/20 6:25:56

1.防抖函数

1.1定义

说明:在一定时间内,频繁执行事件,只执行最后一次函数。(英雄联盟回城)

1.2步骤:

  1. 声明定时器函数
  2. 判断是否有定时器函数,如果有定时器函数的话就清除定时器。。
  3. 如果没有定时器函数的话,就开启定时器函数。
  4. 定时器函数放入执行的函数。

1.3代码

1.3.1原生JS实现

<!DOCTYPE html>
<html lang="zh">
<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>
    <script src="./lodash.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: pink;
            font-size: 20px;
            line-height: 200px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
    <script>
        //   获取盒子
        const box = document.querySelector(".box")
        // 说明变量
        let i = 0
        function mouseAdd() {
            box.innerHTML = i += 1
        }
        // 防抖函数:在规定的时间,频繁点击,只执行最后一次
        function debounce1(fn, time) {
            // 声明一个定时器变量
            let timer;
            // 返回一个匿名函数
            return function () {
                // 如果有定时器那么就清除
                if (timer) clearTimeout(timer)
                // 如果没有就创建一个定时器
                timer = setTimeout(function () {
                    // 在定时器函数中执行要执行的函数
                    fn();
                }, time)
            }
        }
box.addEventListener("mousemove", debounce1(mouseAdd, 1000)

        )
    </script>
</body>
</html>

 1.3.2引入第三方库lodash

<!DOCTYPE html>
<html lang="zh">
<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>
    <script src="./lodash.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: pink;
            font-size: 20px;
            line-height: 200px;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
    <script>
        //   获取盒子
        const box = document.querySelector(".box")
        // 说明变量
        let i = 0
        function mouseAdd() {
            box.innerHTML = i += 1
        }
      
        box.addEventListener("mousemove", _.debounce(mouseAdd, 1000)
        )
    </script>
</body>
</html>

1.3.3效果图

2.节流函数

2.1定义

说明:在一定时间内,频繁执行事件,只执行一次函数(英雄联盟中的技能冷却)

2.2步骤:

  1. 声明定时器函数,并将定时器赋值为空。
  2. 没有定时器函数,就开启定时器函数。
  3. 定时器函数放入执行的函数,并将定时器变量赋值为空。

2.3代码

2.3.1原生JS实现

<!DOCTYPE html>
<html lang="zh">
<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>
    <script src="./lodash.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: pink;
            font-size: 20px;
            line-height: 200px;
            text-align: center;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
    <script>
        const box = document.querySelector(".box")
        let i = 0
        function moveAdd() {
            box.innerHTML = i += 1
        }
      //节流函数:在一定时间内,频繁执行事件,只执行一次函数。
        function throttle(fn, time) {
            let timer=null
            return function () {
                if (!timer) {
                    timer = setTimeout(function () {
                        fn();
                        timer = null
                    }, time)
                }
            }
        }
        box.addEventListener("mousemove", throttle(moveAdd, 1000))
    </script>
</body>
</html>

2.3.2引入第三方lodash库

<!DOCTYPE html>
<html lang="zh">
<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>
    <script src="./lodash.min.js"></script>
    <style>
        .box {
            width: 200px;
            height: 200px;
            background-color: pink;
            font-size: 20px;
            line-height: 200px;
            text-align: center;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>
    <script>
        const box = document.querySelector(".box")
        let i = 0
        function moveAdd() {
            box.innerHTML = i += 1
        }
        box.addEventListener("mousemove",_.throttle(moveAdd,1000))
    </script>
</body>
</html>

2.3.3效果图

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

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

相关文章

chatgpt赋能python:Python中的三角函数介绍

Python中的三角函数介绍 Python作为一种高级编程语言&#xff0c;可以处理基础算术运算、三角函数等高等数学的操作。其中&#xff0c;三角函数是常用的数学函数之一&#xff0c;Pyhon中的三角函数包括正弦函数、余弦函数、正切函数等。 正弦函数 正弦函数在三角学中是最基本…

chatgpt赋能python:精度问题在Python编程中的影响及解决方法

精度问题在Python编程中的影响及解决方法 Python是一种解释性编程语言&#xff0c;以其简单易学、开发效率高等特点而广受欢迎。然而&#xff0c;Python中的浮点数精度问题却经常困扰着程序员。在本文中&#xff0c;我们将详细介绍Python中精度问题的影响及解决方法。 精度问…

华为OD机试真题B卷 Java 实现【字符串分隔】,附详细解题思路

一、题目描述 输入一个字符串&#xff0c;请按长度为8拆分每个输入字符串并进行输出&#xff0c;长度不是8整数倍的字符串请在后面补数字0&#xff0c;空字符串不处理。 二、输入描述 连续输入字符串(每个字符串长度小于等于100)。 三、输出描述 依次输出所有分割后的长度…

layui框架学习(25:弹出层模块_加载框询问框)

layui框架的弹出层模块layer中最重要的函数即layer.open&#xff0c;基于该函数&#xff0c;layer模块封装了很多常用弹出框&#xff0c;上文已介绍了消息框和提示框函数&#xff0c;本文学习加载框和询问框函数的基本用法&#xff0c;同时继续学习layer模块中基础参数的用法。…

Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理

Part1&#xff1a;使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习 1. 效果图2. 原理2.0 前向成像模型2.1 世界坐标系2.2 相机坐标系2.3 坐标变换2.4 投影转换2.5 数据 3. 源码参考 是否有一种方法可以仅从一个场景多张不同视角的照片中捕获整个3D场景&#xff1f; 有…

有奖励!2023陕西省首台(套)重大技术装备产品项目申报条件、认定材料

本文整理了2023陕西省首台&#xff08;套&#xff09;重大技术装备产品项目申报条件&#xff0c;认定材料等相关内容&#xff0c;感兴趣的朋友快跟小编一起来看看吧&#xff01; 一、重点支持方向及领域 重点支持方向及领域&#xff1a;高档工业母机、电力装备、大型矿山和冶金…

【MySQL】MySQL 字段为 NULL 的5大坑

数据准备 建立一张表 数据如下&#xff1a; 1.count 数据丢失 count(*) 会统计值为 NULL 的行&#xff0c;而 count(列名) 不会统计此列为 NULL 值的行。 select count(*),count(name) from person; ----------------------- count(*) | count(name)10 | 8-------…

如何使用Python自动化测试工具Selenium进行网页自动化?

引言 Selenium是一个流行的Web自动化测试框架&#xff0c;它支持多种编程语言和浏览器&#xff0c;并提供了丰富的API和工具来模拟用户在浏览器中的行为。Selenium可以通过代码驱动浏览器自动化测试流程&#xff0c;包括页面导航、元素查找、数据填充、点击操作等。 与PyAuto…

关于linux的ssh(出现的问题以及ubuntu的ssh配置和ssh连接超时问题)

目录 Ubuntu进行ssh连接 关于ssh报错排错 备注&#xff1a;防火墙和selinux可能对ssh连接存在限制&#xff0c;但是我在操作的时候并没对我照成影响 查看selinux状态 ssh_config和sshd_config的区别 Ubuntu进行ssh连接 1.首先需要安装SSH服务器&#xff0c;在ubuntu终端输…

Java学习路线(19)——IO流(下)

一、缓冲流 1、概念&#xff1a; 一种自带缓冲区的字节流、可提高原始字节流、字符流读写数据的性能。 2、缓冲流高性能原理&#xff1a; 磁盘与内存之间有一块存储区域&#xff0c;当磁盘向内存传输数据时&#xff0c;先传输到缓冲区&#xff0c;当缓冲区满了之后&#xff0…

[强网杯 2019]随便注 1【SQL注入】解析过程

1.首先启动并访问靶机&#xff0c;有一个输入框&#xff0c;随便输入1 or 1 1&#xff0c;测试一下是否存在sql注入。 2.提交后提示error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syn…

chatgpt赋能python:Python中的_--了解这个神秘的下划线

Python中的_ – 了解这个神秘的下划线 Python是一种流行的编程语言&#xff0c;它具有简单易学的语法和强大的功能。一些Python的特殊语法经常会让初学者感到困惑。其中&#xff0c;一个神秘的下划线符号在Python中出现的频率非常高&#xff0c;而且它的含义和使用也非常多样化…

chatgpt赋能python:Python中符号的用法

Python中符号的用法 在Python编程中&#xff0c;符号是非常重要的一部分。通过合理使用符号&#xff0c;我们可以轻松地实现许多功能和操作。下面是Python中一些常用的符号的介绍和用法。 赋值符号 斜杠等于号&#xff08;&#xff09;被用来赋值。例如&#xff0c;如果我们要…

Windows的Powershell终端增强

Ubuntu上一直用的Oh My Zsh强化终端&#xff0c;体验非常nice。最近在Win上做东西比较多&#xff0c;于是也想把Powershell这个简陋的终端加强一下。 说干就干&#xff0c;网上查了一圈&#xff0c;发现大部分人用Oh My Posh来操作&#xff0c;因此试了一下&#xff0c;发现卡…

UFS 1-UFS架构简介1

UFS 1-UFS架构简介 1 UFS是什么&#xff1f;1.1 UFS1.2 一般特征1.2.1 Target performance1.2.2 Target host applications1.2.3 Target device types1.2.4 Topology1.2.5 UFS Layering 1.3 Interface Features1.3.1 Three power supplies1.3.2 Signaling as defined by [MIPI-…

Linux系统下imx6ull QT编程—— C++类和对象(三)

Linux QT编程 文章目录 Linux QT编程一、类和对象 一、类和对象 C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。类用于指定对象的形式&#xff0c;它包含了数据表示法和用于处理数据的方…

C++ 函数对象 详解

目录 &#x1f914;函数对象&#xff1a; &#x1f914;本质&#xff1a; &#x1f914;特点&#xff1a; 代码示例&#xff1a; 运行结果&#xff1a; &#x1f914; 内置函数对象&#xff1a; 1.算数仿函数 代码示例&#xff1a; 运行结果&#xff1a; 2.关系仿函数 …

四轴姿态解算-imu算法

理论篇 欧拉角四元数方向余弦矩阵 强调三者描述的是坐标系A,A之间的变换关系 欧拉角&#xff0c;四元数&#xff0c;方向余弦矩阵都可以描述四轴的姿态变换 注意这里强调的是变换 三者转换公式 一阶龙格库塔法 核心要点简介: 假设一阶函数随时间关系如: y a * T1b 则,在经…

chatgpt赋能python:Python中-1的用法介绍

Python中-1的用法介绍 什么是-1&#xff1f; 在Python中&#xff0c;-1是一个特殊的索引值&#xff0c;它表示从序列的末尾开始向前数1个元素。这在对于列表、字符串、元组等序列类型进行操作时非常有用。 如何使用-1&#xff1f; 假设我们有一个列表&#xff1a; l [1, …

达梦数据库8安装教程

第一步&#xff1a;双击驱动 注意&#xff1a;如果双击显示没有驱动&#xff0c;则安装WinCDEmu软件。 第二步&#xff1a;双击setup.exe安装包 第三步&#xff1a;选择时区 第四步&#xff1a;验证key文件 因为我们是免费试用&#xff0c;所以没有key文件&#xff0c;直接下一…