lrl@ 2022-05-10 08:52 采纳率: 75%
浏览 31
已结题

防抖debounce中timestamp取得值为当时按下的时间,如何实现最后一次按下之后再执行

img

我在数字1中加入了防抖去触发’和‘

    watch: {
        num1(newValue) {
            this.debounce(this.changeSum1, 500)()
        }
    },

每次按下时的timestamp的值都是我按下按键的时间,这种情况无论500毫秒后我是否输入完成都会触发时间

我必须把timestamp设置成全局的变量,使用this.timestamp才能实现输入完成后500毫秒之后再执行

debounce = function(func, wait, immediate) {
  var timeout, args, context, timestamp, result;
  var later = function() {
    var last = _.now() - timestamp;
    if (last < wait && last >= 0) {
      timeout = setTimeout(later, wait - last);
    } else {
      timeout = null;
      if (!immediate) {
        result = func.apply(context, args);
        if (!timeout) context = args = null;
      }
    }
  };
  return function() {
    context = this;
    args = arguments;
    timestamp = _.now();
    var callNow = immediate && !timeout;
    if (!timeout) timeout = setTimeout(later, wait);
    if (callNow) {
      result = func.apply(context, args);
      context = args = null;
    }
    return result;
  };
}
  • 写回答

2条回答 默认 最新

  • ✎﹏ℳ๓敬坤 2022-05-10 09:12
    关注

    在vue中他每个组件都是一个独立的,所以你要把防抖封装起来使用
    定一个一个util.js文件写防抖

    //**********************防抖************************//
    let timeout = null
    let debounce = function(fn, wait) {
      if(timeout !== null) clearTimeout(timeout)
      timeout = setTimeout(fn, wait)
    }
    //**********************防抖************************//
    module.exports = {
        debounce:debounce
    };
    
    

    在需要使用的地方使用

    import {debounce} from "util.js"
    debounce(()=>{
      代码块
    },1000)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 5月10日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看