【问题标题】:scroll event not firing on element div滚动事件未在元素 div 上触发
【发布时间】:2017-10-17 19:35:02
【问题描述】:

我在 Angular 组件的模板中有一个 div。在 div 上,我试图获取 div 的滚动位置。

   <div class="data-input" (scroll)="onScroll($event)">Accepted Qty....</div>

html 元素看起来像这样。

在 TS 文件中我有一个函数

 onScroll(event) {
    console.log(event);
}

但是这个功能没有命中。

我已经试过了

@HostListener('scroll', ['$event'])
 onScroll(event) {  ...}

但这在页面滚动时有效。我想在 html 元素(div)滚动时触发滚动事件。

【问题讨论】:

  • 但我不想让窗口滚动。我正在尝试让元素滚动。
  • 您使用的是哪个浏览器?您在其他浏览器中看到问题了吗?
  • 我正在使用 chrome。还没有查看任何其他浏览器。
  • 在什么样的电脑上?

标签: javascript html css angular


【解决方案1】:

您可以尝试通过ElementRefRenderer 进行操作。我为您起草了一个单独的可滚动组件来演示这个概念:

import {Component, OnInit, OnDestroy} from '@angular/core';
import {ElementRef, Renderer2} from '@angular/core';

@Component({
  selector: 'my-scroll',
  template: '<div>Accepted Qty....</div>'
})

export class MyScrollComponent implements OnInit, OnDestroy {

  onScrollListener: Function;

  constructor(private elementRef: ElementRef, private renderer: Renderer2) {
  }

  ngOnInit() {
    this.onScrollListener = 
        this.renderer.listen(this.elementRef.nativeElement, 'scroll', this.onScroll);
  }

  ngOnDestroy() {
    this.onScrollListener();
  }

  onScroll(event) {
    console.log(event);
  }
}

【讨论】:

  • 我的 div 元素在其他元素中。
  • 我认为以 &lt;span&gt; Hello &lt;my-scroll/&gt; world &lt;/span&gt; 的方式使用它没有问题。您也可以从 MyScroll 组件创建一个包装器以提供独立的内容,例如:&lt;my-scroll&gt; &lt;Hello/&gt; world! &lt;/my-scroll&gt;。第二种方法需要一些额外的代码。你也可以建立一个指令......无论如何,这只是一个概念,在我的项目中,我更喜欢使用Renderer.lesten而不是HostListener
猜你喜欢
  • 2019-09-25
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多