欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

防抖动(angular实现)

程序员文章站 2024-03-25 12:42:34
...

方法一:使用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);
    }
《算法设计》摘录 改编
相关标签: 小技巧 防抖动

上一篇: jQuery中的动画

下一篇: