在angular2中使用requestAnimationFrame

时间:2016-02-15 13:26:48

标签: angular

我想在angular2中实现无限滚动

  1. 自动删除视口外的DOM。
  2. 使用requestAnimationFrame代替onscroll。
  3. 我注意到上面是使用Mithriljs实现的,可以在下面的链接中找到。我对如何使用requestAnimationFrame并在angular2中构建一个名为ScrollListener的类感到困惑。请提出建议?

    https://github.com/flarum/core/blob/master/js/lib/utils/ScrollListener.js

    https://github.com/flarum/core/blob/master/js/forum/src/components/PostStream.js

    PS:抱歉我的英文。我不是母语为英语的人。

3 个答案:

答案 0 :(得分:6)

不确定您需要哪些信息

Here就是一个例子

class RafQueue {
  currentFrameId: number;
  constructor(public callback: Function, public frames: number) { this._raf(); }
  private _raf() {
    this.currentFrameId = DOM.requestAnimationFrame(timestamp => this._nextFrame(timestamp));
  }
  private _nextFrame(timestamp: number) {
    this.frames--;
    if (this.frames > 0) {
      this._raf();
    } else {
      this.callback(timestamp);
    }
  }
  cancel() {
    DOM.cancelAnimationFrame(this.currentFrameId);
    this.currentFrameId = null;
  }
}

但我最近遇到https://github.com/angular/angular/issues/6904(未检查,因为它再次正常工作)

答案 1 :(得分:0)

我找到了解决方案:

将其添加到index.html!

<script src="https://npmcdn.com/angular2@2.0.0-beta.17/es6/dev/src/testing/shims_for_IE.js"></script>

之后一切正常!

答案 2 :(得分:0)

您可以使用以下代码调用RequestAnimationFrame(RAf):

    ngAfterViewInit() {
    console.log('element available::' + this.desiredElmentAvailable);
    if(this.desiredElmentAvailable)
    window.requestAnimationFrame( () => this.onRenderComplete.emit(true));

    }
  }

此处this.desiredElmentAvailable是视图中存在的domElement。 当渲染完成时,会发出一个事件并执行您想要做的任何事情。