代码之家  ›  专栏  ›  技术社区  ›  user3024827

在DIV内DIV的角度6轨道滚动位置

  •  0
  • user3024827  · 技术社区  · 6 年前

    我正试图创建一个指令来跟踪它所放置元素的Y位置-当这个元素到达父DIV的顶部时,我将添加粘性样式以使标题保持在顶部,直到整个元素滚动为止。

    我试图跟踪滚动,但除了最初的ngoninit日志外,无法获得任何输出:

    import { Directive, OnInit, ElementRef, HostBinding, HostListener } from '@angular/core';
    
    @Directive({
        /* tslint:disable-next-line:directive-selector */
        selector: '[stickyHeaderDirective]'
    })
    export class StickyHeaderDirective implements OnInit {
    
    
        ngOnInit() {
            console.log('lets track ths scroll');
        }
    
        constructor() {}
    
        @HostListener('scroll', ['$event']) private onScroll($event: Event): void {
            console.log($event.srcElement.scrollLeft, $event.srcElement.scrollTop);
        }   
    }
    

    我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alex K    6 年前

    HostListener 只听 scroll 发生在 [stickyHeaderDirective] 元素。那个元素一定是触发 纸卷 事件。

    确定 [StickyHeader指示] 元素具有正确的CSS样式以允许其滚动。这是一个演示,展示了CSS样式和不CSS样式之间的区别。

    for (let element of document.getElementsByClassName('track-scrolling')) {
      element.addEventListener('scroll', e => {
          console.log(e.srcElement.scrollLeft, e.srcElement.scrollTop);
      });
    }
    .container {
      height: 200px;
      width: 200px;
      overflow: auto;
      margin: 10px;
      border: 1px solid;
    }
    
    .big-content {
      height: 1000px;
      width: 1000px;
    }
    
    .track-scrolling.wrong {
      /*
      No overflow property
      No height/width or max-height/width
      */
      color: red;
    }
    
    .track-scrolling.right {
      overflow: auto;
      max-height: 100%;
      
      color: green;
    }
    <div class="container">
      <div class="track-scrolling wrong">
      I won't fire scroll events
        <div class="big-content"></div>
      </div>
    </div>
    
    <div class="container">
      <div class="track-scrolling right">
      I will fire scroll events
        <div class="big-content"></div>
      </div>
    </div>

    下面是一个演示,展示了与您的指令相同的行为: https://stackblitz.com/edit/angular-kqvraz