防抖动(angular实现)

方法一:使用rxjs

import { Subject } from 'rxjs/Subject';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
  public searchLLStream: Subject<string> = new Subject<string>();
  ngOnInit() {
    this.searchLLStream
      .debounceTime(2000) // 2000毫秒内不抖动
      .distinctUntilChanged()
      .subscribe(streetText => {
        this.getLocation();
      });
  }
this.searchLLStream.next(this.address.street); // 调用

方法二: 

  debounce(func, wait) {
    let timeout;
    return function() {
        // 操作this
        const context = this, args = arguments;
        const later = function() {
            timeout = null;
            func.apply(context, args);
        };
        // wait间隔内,多次调用则清除
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
  }
  keyUp() {
      this.debounce(function() {
          // doSomeThing();
      }, 500);
  }

补充:节流函数,防抖动增加一段时间内必执行一次

    throttle(func, wait, mustRun) {
        let timeout,
            startTime = new Date();
        return function () {
            const context = this,
                args = arguments,
                curTime = new Date();
            clearTimeout(timeout);
            // 如果达到了规定的触发时间间隔,触发 handler
            if (curTime.getTime() - startTime.getTime() >= mustRun) {
                func.apply(context, args);
                startTime = curTime;
                // 没达到触发间隔,重新设定定时器
            } else {
                timeout = setTimeout(func, wait);
            }
        };
    }
    keyUp() {
        this.throttle(function () { }, 500, 1000);
    }
《算法设计》摘录 改编
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值