たとえば、ボタンをクリックしたときに使用するIonic2内で scrollIntoView()
に似たものを探しています。
ion-content
ヘルプ。
この作業プランカーをご覧ください
scrollTo(x,y,duration)
メソッド (docs) を使用できます。コードは非常に単純です。最初にターゲット要素の位置(この場合は_<p></p>
_)を取得し、それをscrollTo(...)
メソッドで使用します。最初のビュー:
_<ion-header>
<ion-navbar primary>
<ion-title>
<span>My App</span>
</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<button ion-button text-only (click)="scrollElement()">Click me</button>
<div style="height: 600px;"></div>
<!-- Notice the #target in the p element -->
<p #target>Secret message!</p>
<div style="height: 600px;"></div>
</ion-content>
_
そしてコンポーネントコード:
_import { ViewChild, Component } from '@angular/core';
import { NavController, Content } from 'ionic-angular';
@Component({
templateUrl:"home.html"
})
export class HomePage {
@ViewChild(Content) content: Content;
@ViewChild('target') target: any;
constructor() { }
public scrollElement() {
// Avoid reading the DOM directly, by using ViewChild and the target reference
this.content.scrollTo(0, this.target.nativeElement.offsetTop, 500);
}
}
_
上記のソリューションは、Angularユニバーサルサーバー側レンダリング(SSR)ではうまく機能しないことに気付きました。これは、document
がサーバー側で利用できないためです。
したがって、Angular 4+でAoT
およびSSR
で機能する要素へのスクロールを実現する便利なプラグインを作成しました
GitHub
ngx-scroll-to
私はこれをIonic 3で、そして_<Element>.offsetTop
_が戻ってきたという事実のために_10
_(要素の上部のパディング)の代わりにページの一番上(はるかに大きな未知数)私は<Element>.scrollIntoView()
を使用することになりました。
_<Element>
_オブジェクトを取得するためにdocument.getElementById()
を使用しましたが、そのハンドルを取得する方法には他にも多くのオプションがあります。
HTMLでアンカーリンクを使用します。
Elemntとid = "scrollXYZ"を指定して、ボタンを
例:
<a href="#scrollXYZ"><button>Example</button></a>
<div id="scrollXYZ"><h2>Scroll to this</h2></div>
Ion-content shouldには、特定の子要素にスクロールするためのメソッドがありますが、深くなります。現在のメソッドは大丈夫ですが、ionicの目的の1つの観点は、document.getElementById
のような面倒で退屈なコードを廃止することです。
また、メソッドにはスクロールアニメーションの制御もありません。
したがって、現在のところ、最良のオプションはscrollIntoView
メソッドです。スクロールする要素にidを付加し、getElementbyIDを使用してscrollIntoViewを呼び出します。そう:
。html
...
<ion-row id="myElement">
...
</ion-row>
ts
...
scrollToMyElement() {
document.getElementById('myElement').scrollIntoView({
behavior: 'smooth',
block: 'center'
});
}
次に、DOMイベントまたはボタンのクリック時にメソッドを呼び出します。要素が条件付きの場合、これはおそらく機能しません。代わりに、条件付きのhidden属性を使用するか、またはngIfを使用する必要がある場合は、要素が最初に挿入されるようにロジックの時間を調整します。
他のさまざまなionic(4)UIコンポーネントでこれを試しましたが、正常に動作します。
_Ionic 4
_では、スクロール関数の名前がscrollToPoint()
に変更されました。