2017-08-01 19 views
1

jQueryのelement.offset()。topでは、ドキュメントの上端から固定要素の現在位置を取得します。私がスクロールダウンしているときに、オフセットトップ値をスクロールアップすると、スクロールアップします。角4スクロール要素のオフセットトップ値

今、私は角度4で同じ動作が必要ですが、私は何かが足りなくて、オフセットトップ値は同じです。

添付Plunkerを参照してください:https://embed.plnkr.co/3sDzpRcJMEN6lndw4MUB

@Component({ 
    selector: '[my-app]', 
    template: ` 
    <div> 
     <h2>There is document top</h2> 
     <div class="fixed-box" #fixedBox> 
     <p>I'm fixed box</p> 
     <p>I wanna know my offset from the document top (not viewport) in every scroll step</p> 
     <p>My current position from the document top is: {{ fixedBoxOffsetTop }}px</p> 
     <p>My current position from the document top is: {{ fixedBoxOffsetTopOtherMethod }}px</p> 
     </div> 
    </div> 
    `, 
}) 
export class App implements OnInit { 
    fixedBoxOffsetTop: number = 0; 
    fixedBoxOffsetTopOtherMethod: number = 0; 

    @ViewChild('fixedBox') fixedBox: ElementRef; 

    constructor() {} 

    ngOnInit() {} 

    @HostListener("window:scroll", []) 
    onWindowScroll() { 
    this.fixedBoxOffsetTop = this.fixedBox.nativeElement.offsetTop; // This value looks like init value and doesn't change during scroll 
    this.fixedBoxOffsetTopOtherMethod = this.fixedBox.nativeElement.getBoundingClientRect().top; // The same result as offsetTop 
    } 
} 

誰も助けることができますか?

+0

あなたはおそらく、あなたの体にコードを含めます質問。そのリンクは確かに1日失効し、この疑問は意味を失うことになります。 – jdv

答えて

0

あなたがwindowdocumentオフセット逃した:それは私の方法があります

const rect = this.fixedBox.nativeElement.getBoundingClientRect(); 
this.fixedBoxOffsetTop = rect.top + window.pageYOffset - document.documentElement.clientTop; 

Forked Plunker

+0

これはまだウィンドウのサイズ変更をケータリングしていません... ;-) – JGFMK

+1

@JGFMK彼は 'resize'イベントを聞きません。こちらを参照してくださいhttps://plnkr.co/edit/PLZfad6kQZuHR3qAqxWk?p=preview – yurzui

+0

https://plnkr.co/edit/Z0cSqqJJXWw6dpPeHMbs?p=preview - これを最初に行い、出力します。複数のイベントをハンドラにバインドする方法があると思う - https://github.com/TheLarkInn/angular2-multievent-bindings-plugin/blob/master/README.md – JGFMK

0

を:

getCurrentOffsetTop(element: ElementRef) { 
    const rect = element.nativeElement.getBoundingClientRect(); 
    return rect.top + window.pageYOffset - document.documentElement.clientTop; 
} 
関連する問題