Vue2.0、Vue3.0节流

简介: 本文介绍了在Vue 2和Vue 3中实现节流(throttle)的方法,通过封装节流函数控制一段时间内只能执行一次操作,并在Vue组件中应用该节流函数处理点击事件。

节流:一段时间内只能执行一次
意思:就是控制时间戳来达到第一次点击有效果后,下次点击必须在一定时间后才能再次点击有效果;
核心思路:使用时间戳来实现;

首先封装节流函数:
我们这里不需要考虑this指向,统一使用箭头函数:

/**
 * @param {*} awaitTime 时间戳 定时器时间毫秒数
 * @param {*} fun 传入的函数
 * @param {*} arrAgu 传入的函数的参数
 */
const stopUpDownFunList = (awaitTime=2000) => {
    let startTimer = 0;
    //节流  一段时间只能执行一次 使用时间戳控制
    const retrunStopUpDown =  (fun, ...arrAgu) =>{
        if (typeof fun !== 'function') return
       let endTimer = new Date().getTime()
        if (endTimer - startTimer > awaitTime) {
            fun( ...arrAgu)
            startTimer = new Date().getTime()
        }
    }
    return retrunStopUpDown
}
export default stopUpDownFunList

vue2页面:

<template>
  <div>
    <el-button @click="getchange('wo','shi','zjq','hhhh')" type="primary">getchange</el-button>
  </div>
</template>

<script>
import stopUpDownFunList from "../assets/stopUpDown";
let stopUpDownFun = stopUpDownFunList();

export default {
  data() {
    return {
      zjq: "88888888"
    };
  },

  mounted() {},
  methods: {
    getchange(...aguList) {
      stopUpDownFun((...data) => {
        console.log(666);
        console.log(...data);
        console.log(this.zjq);
        this.getchange2();
      }, ...aguList);
    },
    getchange2() {
      console.log("%c成功调用getchange2函数",'color:red');
    }
  }
};
</script>

其实上面的代码做了两件事,引入节流函数,页面按钮加点击事件。
1:首先使用es6的形式引入我们函数模块,封装的时候使用了闭包的形式,所有我们需要提前调用一下,使用他的返回函数作为我们真正要用的函数stopUpDownFun;
2:点击页面按钮,会执行methods里面的getchange函数,并且接收到了参数,aguList使用剩余参数的形式来接收,在getchange函数中调用stopUpDownFun函数,stopUpDownFun函数第一个参数是一个函数,也就是我们真正的业务逻辑函数,第二个参数就是该业务逻辑函数需要的参数;
3:在stopUpDownFun函数内部,使用时间戳的形式来控制业务逻辑函数是否执行;
4:业务逻辑函数使用箭头函数的形式来保证this的正确指向。

在这里插入图片描述

vue3页面:

<template >
  <span @click="getCaptchaCode('aaa','bbb','ccc')" class="codeSpan" v-html="code"></span>
</template>
<script>
import stopUpDownFunList from "@/stopUpDown.js";
import axios from "@/axios";
import { ElMessage } from "element-plus";
import { ref, onMounted } from "vue";
export default {
  setup(props) {
    let code = ref();
    onMounted(() => {
      getCaptchaCode();
    });
    const stopUpDownFun = stopUpDownFunList();
    const getCaptchaCode = (...arrAgu) => {
      stopUpDownFun((...data) => {
        console.log("%c下面是传递过来的参数", "color:red");
        console.log(...data);
        // //...业务逻辑
        axios.get("getCaptchaCode").then(res => {
          res.code === "200" && (code.value = res.data.code);
          ElMessage.success({
            message: "验证码获取成功",
            type: "success"
          });
          localStorage.setItem("token", res.data.token);
        });
      }, ...arrAgu);
    };
    return { getCaptchaCode, code };
  }
};
</script>

在这里插入图片描述

目录
相关文章
uni-app项目中如何添加百度统计代码?
uni-app项目中如何添加百度统计代码?
|
资源调度 监控 负载均衡
浅析PM2实用入门指南
PM2 是一个守护进程管理器,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。使用起来也是非常简单
1862 0
|
8月前
|
存储 监控 BI
评测:大模型时代的智能BI—Quick BI
作为一位数据平台开发工程师,我近期体验了阿里云Quick BI的深度功能。以下从技术视角总结:1. 数据集成支持本地文件快速建模,但大文件上传和多表关联有待优化;2. 开放API便于报表嵌入,建议增加频次限制与实时推送能力;3. 计算引擎性能良好,复杂查询时需优化分布式调度;4. 资源监控模块实用,但缺乏预警机制;5. 安全体系完善,建议增强自动权限管理和KMS集成。总体而言,Quick BI是一款适合中大型企业的智能BI工具,具备强大API生态和多租户设计。
307 1
|
9月前
|
存储 缓存 关系型数据库
MySQL进阶突击系列(08)年少不知BufferPool核心原理 | 大哥送来三条大金链子LRU、Flush、Free
本文深入探讨了MySQL中InnoDB存储引擎的buffer pool机制,包括其内存管理、数据页加载与淘汰策略。Buffer pool作为高并发读写的缓存池,默认大小为128MB,通过free链表、flush链表和LRU链表管理数据页的存取与淘汰。其中,改进型LRU链表采用冷热分离设计,确保预读机制不会影响缓存公平性。文章还介绍了缓存数据页的刷盘机制及参数配置,帮助读者理解buffer pool的运行原理,优化MySQL性能。
|
JavaScript 开发工具
vite如何打包vue3插件为JSSDK
【9月更文挑战第10天】以下是使用 Vite 打包 Vue 3 插件为 JS SDK 的步骤:首先通过 `npm init vite-plugin-sdk --template vue` 创建 Vue 3 项目并进入项目目录 `cd vite-plugin-sdk`。接着,在 `src` 目录下创建插件文件(如 `myPlugin.js`),并在 `main.js` 中引入和使用该插件。然后,修改 `vite.config.js` 文件以配置打包选项。最后,运行 `npm run build` 进行打包,生成的 `my-plugin-sdk.js` 即为 JS SDK,可在其他项目中引入使用。
664 6
|
开发框架 前端开发 JavaScript
网页CAD中二维CAD图转三维CAD的方法
本文介绍了一种将网页CAD中的二维图纸转换成三维模型的方法,特别聚焦于通过拉伸平面图形至一定高度来实现三维效果。文中利用了mxcad和mxcad3d两个框架,前者负责读取和解析二维CAD图纸,后者则基于这些数据构建三维模型。文章详细阐述了安装配置步骤及代码实现细节,包括创建项目、安装依赖、编写HTML与JavaScript代码等,并提供了完整的示例代码。最终实现了从二维图纸自动转换并展示三维模型的功能,同时添加了交互元素以方便用户操作。
网页CAD中二维CAD图转三维CAD的方法
|
JavaScript API
一个简单的Vue移动端抽奖页面的示例
一个简单的Vue移动端抽奖页面的示例
690 1
|
SQL 关系型数据库 MySQL
GORM V2 安装和连接 MySQL
GORM V2 安装和连接 MySQL
1047 0
|
网络协议
|
消息中间件 资源调度 安全
操作系统----临界区,临界资源,互斥量,互斥对象
操作系统----临界区,临界资源,互斥量,互斥对象
574 2