重要:私の場合、ページには読み込みに時間がかかる画像があります。イメージが読み込まれるまで、位置データが正しくありませんでした。私は単に紹介ページを開く遅延タイマーを持って、今の
$(window).load(function() {
});
:これは、jQueryのでは同じであるとしてラップするコマンドによって解決されます。
MY-position.ts
この指令は(ページ上の)別の基準素子に対して素子の相対的な左/トップ設定します。
import { Directive, Input, OnInit, ElementRef, Renderer } from '@angular/core';
/**
* Inspired by jQuery position: https://api.jqueryui.com/1.8/position/
*/
@Directive({
selector: '[my-position]',
host: {
'[style.position]': '"absolute"',
}
})
export class MyPosition implements OnInit {
@Input('my-position') of: any;
@Input('my') myInput: string;
@Input('at') atInput: string;
@Input('offset') offsetInput: string;
my: string[];
at: string[]
offset: string[];
constructor(
private element: ElementRef,
private renderer: Renderer
) {}
ngOnInit() {
if (this.of.nativeElement) {
let top: number;
let left: number;
// Default inputs.
if (!this.myInput) {
this.myInput = 'top left';
}
if (!this.atInput) {
this.atInput = 'top left';
}
if (!this.offsetInput) {
this.offsetInput = '0 0';
}
this.my = this.myInput.split(' ');
this.at = this.atInput.split(' ');
this.offset = this.offsetInput.split(' ');
// Get reference element position.
let rect = this.of.nativeElement.getBoundingClientRect();
// Set new top/left values.
left = rect.left + parseInt(this.offset[0]);
top = rect.top + parseInt(this.offset[1]);
// Adjust top/left values for on element position.
if (this.at[0] == 'center') {
left += rect.width/2;
}
if (this.at[1] == 'center') {
top += rect.height/2;
}
// Position element.
this.renderer.setElementStyle(this.element.nativeElement, 'top', top + 'px');
this.renderer.setElementStyle(this.element.nativeElement, 'left', left + 'px');
}
}
}
introduction.html紹介ページにツールチップ/ヒントを追加します。 my-positionディレクティブを追加し、相対要素をパラメータとして渡します。位置パラメータを追加します(必要に応じて)。コンストラクタで
<div class="hint" [my-position]="hintRef1" my="left top" at="left top" offset="0 105">This is an app hint!</div>
introduction.ts
取得hintRef1要素パラメータ。
constructor(
public navCtrl: NavController,
public navParams: NavParams,
private viewController: ViewController
) {
// Get elements (passed as parameters from page) to use as references (to position hints).
this.hintRef1 = navParams.get('hintRef1');
this.hintRef2 = navParams.get('hintRef2');
this.hintRef3 = navParams.get('hintRef3');
}
home.html
要素(キャメルケースでなければならない)、例えばを参照する名前を追加
<div #hintRef1 ...
home.ts
は(パラメータとして渡す)ホームページの参照要素を取得します。
// Pass position reference elements to introduction popover.
@ViewChild('hintRef1') hintRef1;
@ViewChild('hintRef2') hintRef2;
@ViewChild('hintRef3') hintRef3;
紹介ページにパラメータとして参照要素を渡します。
CSSを使用して1つのコンポーネントを別のコンポーネントの子として配置できますか? DOM操作は避けなければなりません。 – Askanison4
わかりません。質問を更新しました。目標は、ヘルプ/ヒントテキストを要素の上に配置できるページの上にオーバーレイを作成できるようにすることです。 –
答えはあなたに十分な時間を与えましたか? – Askanison4