web-dev-qa-db-ja.com

angular2のスクロールトップ

Angular2 Webアプリケーションに取り組んでいますが、次の支援が必要です。私のページは複数のコンポーネントで構成されています。ユーザーがボタンをクリックしたときにページの上部をスクロールしたい。私は試した document.body.scrollTop = 0;しかし、これはChromeでは機能しません。 document.documentElement.scrollTop = 0; window.scrollTo(0、0);を試しました。しかし、動作していません

14
Vinodh Ram

このようなインポート、

import { Inject} from "@angular/core";
import { DOCUMENT } from '@angular/platform-browser';

コンストラクタにこれを追加し、

constructor(@Inject(DOCUMENT) private document: Document) { }

次に、このようにスクロールを設定できます。

this.document.body.scrollTop = 0;
19
jaseelmp

データバインディングを使用してangularスクロールの問題を解決しました。

<div class="container" [scrollTop]="scrollTop"> ... </div>

スタイル付き:

.container {
  height: 100%;
  scroll: auto;
  position: relative;
}
5
Julien Pilet

App.component.tsで

const mainDiv = document.getElementById('mainDIV');
mainDiv.scrollTop = 0;

App.component.htmlで

<div id="mainDIV" style="height: 100vh;overflow: auto;">
    <app-header></app-header>
    <router-outlet></router-outlet>
    <app-footer></app-footer>
</div>
4
Vinodh Ram

ただ使用する:

window.scroll(0, 0);
4
JanP

そのための指令を書くことを提案します。使用しているモジュールに必ずインポートしてください。

import { Directive, HostListener } from '@angular/core';

@Directive({
  selector: '[scrollToTop]'
})
export class ScrollToTopDirective {
  @HostListener('click')
  public onClick() {
    if (window && window.pageYOffset) {
      window.scroll(0, 0);
    }
  }
}

以下のように使用します

<button scrollToTop>Scroll to Top</button>

Angularベストプラクティスに従って、ディレクティブにプレフィックスを追加することも検討してください。

https://angular.io/guide/styleguide#directive-custom-prefix

2
Viktor Soroka

以下のコードを使用してください。私の場合

this.document.body.scrollTop = 0

働いていないが

this.document.documentElement.scrollTop = 0

ワーキング。ブラウザーの依存関係もあります。

import { Inject} from "@angular/core";
import { DOCUMENT } from '@angular/platform-browser';

constructor(@Inject(DOCUMENT) private document: Document) { }
this.document.documentElement.scrollTop = 0;
1
Tapas Garai

htmlコード:

<div class="scroll-to-top" [ngClass]="{'show-scroll': navIsFixed}">
            <button (click)="scrollToTop()">
                Top
            </button>
        </div>

cSSコード:

.scroll-to-top {
    position: fixed;
    bottom: 15px;
    right: 15px;
    opacity: 0;
    transition: all .2s ease-in-out;
}

.show-scroll {
    opacity: 1;
    transition: all .2s ease-in-out;
}

tsコード:

import {Component, OnInit, Inject, HostListener} from '@angular/core';
import { DOCUMENT } from "@angular/platform-browser";
import { BrowserModule } from '@angular/platform-browser';
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Hard Hitter@Cool';
  navIsFixed: boolean;
  constructor(@Inject(DOCUMENT) private document: Document){

  }
  @HostListener("window:scroll", [])
  onWindowScroll() {
      if (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop > 100) {
          this.navIsFixed = true;
      } else if (this.navIsFixed && window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop < 10) { this.navIsFixed = false; } } scrollToTop() { (function smoothscroll() { var currentScroll = document.documentElement.scrollTop || document.body.scrollTop; if (currentScroll > 0) {
              window.requestAnimationFrame(smoothscroll);
              window.scrollTo(0, currentScroll - (currentScroll / 5));
          }
      })();
  }

}
1
Rajesh Valluru

それがウィンドウスクロールではなく、彼自身のスクロールを持つdivだけである場合、これは動作するはずです:

GloabalサービスWindowRef:

import { Injectable } from '@angular/core';

function _window(): any {
  // return the global native browser window object
  return window;
}

@Injectable()
export class WindowRef {
  get nativeWindow(): any {
    return _window().document;
  }
}

コンストラクタに追加します:

constructor(private winRef: WindowRef) {}

そして、あなたがそれを置きたいコードで、この行を追加するだけです:

this.winRef.nativeWindow.getElementsByClass('nameOfClass')[0].scroll(0, 0);

もちろん、getElementByTagName、getElementById、getElementByNameなどの他のセレクターも使用できます...

0
anja

この引数をコンストラクタに挿入します:@Inject(DOCUMENT) private document: Document

次に、scrollIntoView関数を呼び出します。

this.document.body.scrollIntoView({
   block: 'start',
   behavior: 'smooth'
});

準備完了!! :)

0
anlijudavid