当前位置:   article > 正文

防抖动(angular实现)_angular keyup防抖动

angular keyup防抖动

方法一:使用rxjs

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

方法二: 

  1. debounce(func, wait) {
  2. let timeout;
  3. return function() {
  4. // 操作this
  5. const context = this, args = arguments;
  6. const later = function() {
  7. timeout = null;
  8. func.apply(context, args);
  9. };
  10. // wait间隔内,多次调用则清除
  11. clearTimeout(timeout);
  12. timeout = setTimeout(later, wait);
  13. };
  14. }
  15. keyUp() {
  16. this.debounce(function() {
  17. // doSomeThing();
  18. }, 500);
  19. }

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

  1. throttle(func, wait, mustRun) {
  2. let timeout,
  3. startTime = new Date();
  4. return function () {
  5. const context = this,
  6. args = arguments,
  7. curTime = new Date();
  8. clearTimeout(timeout);
  9. // 如果达到了规定的触发时间间隔,触发 handler
  10. if (curTime.getTime() - startTime.getTime() >= mustRun) {
  11. func.apply(context, args);
  12. startTime = curTime;
  13. // 没达到触发间隔,重新设定定时器
  14. } else {
  15. timeout = setTimeout(func, wait);
  16. }
  17. };
  18. }
  19. keyUp() {
  20. this.throttle(function () { }, 500, 1000);
  21. }
《算法设计》摘录 改编
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/223065
推荐阅读
相关标签
  

闽ICP备14008679号