0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

いくつか方法があります。

viewportScroller.scrollToAnchor

特定のIDを持つ要素までスクロールします。

コンポーネントでは次のように記述します。

/* 省略 ... */

    constructor(private viewportScroller: ViewportScroller) {
    }

    sampleMethod() {
        this.viewportScroller.scrollToAnchor('specific_id')
    }

/* 省略 ... */
<div id="specific_id"></div>

ViewChild

scrollToAnchor は即座にスクロールしてくれるのですが、 ユーザからすると一瞬で画面が変わることになり、なにが起きたのか理解できなくなることがあります。

スムーズにスクロールする方法のひとつに、 ViewChild を使う方法があります。
ViewChild を使ってHTMLの要素をコードから使えるようにしておきます。
スクロールは HTML の要素が持つメソッドを使って行います。

/* 省略 ... */

    @ViewChild('specific') specificElement: ElementRef | undefined

    sampleMethod() {
      this.specificElement?.nativeElement.scrollIntoView({
        behavior: "smooth", block: "start", inline: "nearest"
      })
    }

/* 省略 ... */
<div #specific></div>

たとえば次のように、条件変更と同時に要素が出現する場合には、 setTimeout を使うとうまくスクロールできます。

/* 省略 ... */

    sampleMethod() {
      this.flag = true
      setTimeout(
        () => {
          this.specificElement?.nativeElement.scrollIntoView({
            behavior: "smooth", block: "start", inline: "nearest"
          })
        },
        100
      )
    }

/* 省略 ... */
<div *ngIf="flag">
    <div #specific></div>
</div>
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?