Vue防抖节流

编程知识 更新时间:2023-04-29 04:15:35

使用场景:

1. 多次操作只执行第一次操作。

    -- 可以用于用户点击按钮事件防抖操作。

2.多次操作只执行最后一次操作。

    -- 可以搜索输入框,输入多个字符进行搜索,当输入停止之后进行搜索操作者。

使用步骤:

1.vue项目中src\utils\utils.js定义全局防抖函数:

 /**
   * 防抖
   * @param {function} fn 执行函数
   * @param {number} wait 等待时间,毫秒
   * @param {boolean} immediate 是否立即执行
   */
  debounce: function (fn, wait, immediate) {
    let timeout; // 局部全局变量
    return function (...args) {
      let context = this;
      if (timeout) clearTimeout(timeout); // 清除计时器,但是timeout本身还在,只是不会在执行

      if (immediate) { // 总是执行第一次操作
        let callNow = !timeout; // 第一次为true
        // 多次操作,timeout初始化,多次触发只有当wait等待时间结束timeout才为空
        timeout = setTimeout(function () {
          timeout = null;
        }, wait);
        // 第一次为true, 执行
        if (callNow) fn.apply(context, args);
      } else { // 总是执行最后一次操作
        timeout = setTimeout(function () {
          fn.apply(context, args);
        }, wait);
      }
    };
  },

2. 组件中使用debounce防抖函数:

(1)多次操作只执行第一次操作:

<template>
  <div class="entry-list" @click="entryClick>
    点击跳转页面时,避免多次点击之后执行多次跳转页面
  </div>
</template>

<script>
import utils from "./utils/utils";
const debounce = utils.debounce;
export default {
  name: "EntryList",
  data() {
    return {};
  },
  methods: {
    /**
     * 多次点击事件,只执行第一次点击事件
     */
    entryClick: debounce(
      function () {
        console.log("多次点击事件,只执行第一次点击事件");
      },
      500,
      true
    ),
  },
};
</script>

(1)多次操作只执行最后一次操作:

<template>
  <div ref="container" class="private-opportunity-list">
    <van-search
      v-model="searchValue"
      shape="round"
      placeholder="请输入机会/项目名称"
      @input="search"
    />
  </div>
</template>

<script>
import utils from "./utils/utils";
const debounce = utils.debounce;

export default {
  name: "FilterProjectList",
  data() {
    return {
      total: 0,
      searchValue: "", // 根据客户简称检索条件
    };
  },
  components: {
    SearchProjectListItem,
  },
  methods: {
    search: debounce(function () {
      // 输入多个字符,字符变化事件,只执行最后一次搜索
      this.doSearch(this.searchValue);
    }, 500),
  },
};
</script>

效果图:

更多推荐

Vue防抖节流

本文发布于:2023-04-21 18:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/d2a9839ccc2ef68f81b6b6fa0d2e5dfb.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:防抖   Vue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 93769文章数
  • 23780阅读数
  • 0评论数