首页 > 其他分享 >【JS】手写防抖

【JS】手写防抖

时间:2023-09-06 20:45:42浏览次数:33  
标签:function 防抖 func timer JS 版本 手写 执行

防抖分为立即执行版本非立即执行版本

 

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>防抖</title>
</head>
 
<body>
 
</body>
<script>
    /**
    * @desc 函数防抖---“立即执行版本” 和 “非立即执行版本” 的组合版本
    * @param func 需要执行的函数
    * @param wait 延迟执行时间(毫秒)
    * @param immediate---true 表立即执行,false 表非立即执行
    **/
    function debounce(func, wait, immediate) {
        let timer;
 
        return function () {
            let context = this;
            let args = arguments;
 
            if (timer) clearTimeout(timer);
 
            if (immediate) {
                var callNow = !timer;
                timer = setTimeout(() => {
                    timer = null;
                }, wait)
                if (callNow) func.apply(context, args)
            } else {
                timer = setTimeout(function () {
                    func.apply(context, args)
                }, wait);
            }
        }
    }
 
    function handle() {
        console.log(Math.random());
    }
 
    window.addEventListener("mousemove",debounce(handle,1000,true)); // 调用立即执行版本
    // window.addEventListener("mousemove", debounce(handle, 1000, false)); // 调用非立即执行版本
</script>
</html>

 

标签:function,防抖,func,timer,JS,版本,手写,执行
From: https://www.cnblogs.com/zjy4fun/p/17683338.html

相关文章

  • JS性能优化
    JS性能优化一般来说:运算为10^8级,花费时间为一秒。内存管理内存:由可读写单元组成,表示一片可操作空间管理:人为的去操作一片空间的申请、使用和释放内存管理:开发者主动申请空间、使用空间、释放空间管理流程:申请―使用―释放内存泄漏现象内存的泄漏:当对象持续......
  • JS在数据类型前使用“+”的作用
    js在某个数据类型前使用‘+’,这个操作目的是为了将该数据类型转换为Number类型,如果转换失败,则返回NaN; 实际使用例如:+newDate() 返回当前时间戳  参考---https://blog.csdn.net/m0_46893049/article/details/125677006......
  • zone.js由入门到放弃之三——zone.js 源码分析【setTimeout篇】
    Delegate是个好东西,看看孙啸达同学对ZoneDelegate的介绍吧,这是他关于zone.js系列文章的第三篇~zone.js系列往期文章zone.js由入门到放弃之一——通过一场游戏认识zone.jszone.js由入门到放弃之二——zone.jsAPI大练兵zone.js源码分析接下来的全是干货,从头到尾,一干到底一点前置:Zon......
  • 小程序中格式化JSON数据中的日期
    小程序中格式化JSON数据中的日期 //假设原始JSON数据为constoriginalJson={name:'JohnDoe',birthdate:'1990-01-01'};//将日期格式化为标准的ISO8601格式constformattedJson={};Object.keys(originalJson).forEach(key=>{if(key==='birthdate......
  • 开课吧前端1期.阶段2:ES6详解-3 面向对象 JSON
    7、面向对象-基础//原来写法functionUser(name,pass){//这就是一个类this.name=name;this.pass=pass;}User.prototype.showName=function(){alert(this.name)};User.prototype.showPass=function(){alert(this.pass)};varu1=newUser('blue','111......
  • 使用Nodejs的addon导入cpp生成的dll时出现的问题记录
    在使用Nodejs的addon导入自己编写的cpp的dll时出现的一系列问题记录标签:__declspec、Napi、LoadLibraryA、GetLastError、dumpbin/exports。正常创建一个使用Napi的nodejsaddon项目(网上都有,在这里不赘述),主要代码如下:#include<napi.h>#include<iostream>#include<atlst......
  • vuejs3.0 从入门到精通——初始化项目——项目结构
    初始化项目——项目结构 项目结构是项目的整体展现,也是对不同文件和文件夹的业务模块的划分。随着业务需求的迭代,项目会不断地增加业务模块,建立业务模块文件,使项目结构清晰、方便管理,这是很重要的。这个目录结构是使用VueCLI创建的Vue.js项目,其中包含了一些常用的文件和......
  • 软件测试|Python对JSON的解析和创建详解
    简介JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,已经成为当今互联网应用中广泛使用的数据格式之一。Python提供了内置的模块来解析和创建JSON数据,使得在Python中处理JSON变得非常简单。本文将详细介绍Python对JSON的解析和创建过程,并提供示例代码来帮助大家更好地理......
  • vue3集成jsoneditor
    一、背景之前在做录制回放平台的时候,需要前端展示子调用信息,子调用是一个请求列表数组结构,jsoneditor对数组的默认展示结构是[0].[1].[2]..的方式,为了达到如下的效果,必须用到onNodeName的钩子函数,因此深入调研了下vue3如何集成jsoneditor最后做出来的效果图onNodeName的参考......
  • vuejs3.0 从入门到精通——项目创建
    项目创建 完成VueCLI脚手架的安装后,即可快速构建一个全新Vue.js项目,包括可初始化项目的整体结构、依赖包、插件等相关工作。一、命令构建项目1.1、创建项目:[root@JumperServer:project_vue]#vuecreatevue3-element-plus-adminVueCLIv5.0.8?Pleasepickapr......