码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Vue2之防抖_debounce封装函数&v-debounce自定义指令(传参/不传)


    目录

    1、防抖

    2、debounce - 封装函数

    3、v-debounce 全局自定义指令


    1、防抖

    推荐文章 :

    https://blog.csdn.net/weixin_58099903/article/details/119902796


    2、debounce - 封装函数

    utils / tools.js

    1. /**
    2. * 函数防抖 是n秒后延迟执行,多用于页面scroll滚动,窗口resize,防止按钮重复点击
    3. * @param {Function} fn 是我们需要包装的事件回调
    4. * @param {Number} delay 是每次推迟执行的等待时间
    5. * @returns
    6. */
    7. export default function (fn, delay) {
    8. // 记录上一次触发的时间
    9. var timer = null;
    10. return function () {
    11. // 保留调用时的this上下文
    12. var context = this;
    13. // 保留调用时传入的参数
    14. var args = arguments;
    15. // 每次事件被触发时,都去清除上一次延时器
    16. if (timer) clearTimeout(timer);
    17. // 设立新的定时器
    18. timer = setTimeout(function () {
    19. fn.apply(context, args);
    20. }, delay);
    21. };
    22. };

    使用 :

    1. <template>
    2. <div>
    3. <el-button @click="submitForm(item.id)">防抖el-button>
    4. div>
    5. template>
    6. <script>
    7. import { debounce } from '../utils/tools';
    8. export default {
    9. methods: {
    10. submitForm: debounce(function (id) {
    11. console.log('防抖', id);
    12. }, 1000),
    13. },
    14. };
    15. script>

    3、v-debounce 全局自定义指令

    utils / directives.js

    1. /**
    2. * v-debounce 防抖指令 防止重复点击
    3. * @param {Function} fn 方法名【必传】
    4. * @param {*} params 函数参数
    5. * @param {String} event 触发方式click
    6. * @param {Number} delay 防抖时间1000
    7. */
    8. const debounce = Vue.directive('debounce', {
    9. inserted: function (el, binding) {
    10. let timer; // 定时器
    11. const { fn, params, event, delay } = binding.value;
    12. el.addEventListener(event || 'click', () => {
    13. // 每次事件被触发时,都去清除之前旧的定时器
    14. if (timer) clearTimeout(timer);
    15. // 设立新的定时器
    16. if (binding.value.hasOwnProperty('params')) {
    17. // 传参用法:v-debounce="{ fn: 方法名, params: '传参', delay: 防抖时间 }"
    18. timer = setTimeout(() => {
    19. fn(params);
    20. }, delay || 1000);
    21. } else {
    22. // 不传参用法:v-debounce="方法名"
    23. timer = setTimeout(() => {
    24. binding.value();
    25. }, 1000);
    26. }
    27. });
    28. },
    29. });
    30. export { debounce };

    使用 :

    1. // main.js 中引用
    2. import "./utils/directives";
    1. <el-button v-debounce="submitForm">防抖el-button>
    2. <el-button
    3. v-debounce="{
    4. fn: submitForm,
    5. params: item.id,
    6. event: 'click',
    7. delay: 1000,
    8. }"
    9. >防抖
    10. >
    11. methods: {
    12. submitForm (id) {
    13. console.log('防抖', id);
    14. },
    15. },

  • 相关阅读:
    中电金信开启2023公益助学活动,以公益之光,守护童年梦想!
    Pandas+Pyecharts | 上海市餐饮数据分析可视化
    基于Windows编译someip
    ChatGPT 串接到 Discord - 团队协作好助理
    python发送邮件
    【算法练习Day27】买卖股票的最佳时机 II&&跳跃游戏&&跳跃游戏 II
    单段时间最优S型速度规划算法
    lintcode 1642 · 查询字符串【二进制 字符串 中等 vip】
    CSDN积分获取攻略:快速积累积分的小技巧
    Linux 系统编程:内存管理系统调用的深度解析
  • 原文地址:https://blog.csdn.net/weixin_58099903/article/details/133928603
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号