2017-07-18 12 views
3

私は絶対位置決め使用したいと私はrelativeコンテナ内ではないです確認するため、私は携帯電話の午前なら、私は、DOMにVueのコンポーネントを上に移動しています。また、ウィンドウのサイズ変更で動作するようdomの内側でVueコンポーネントを移動しますか?

if (this.mobile) { 
    this.$el.parentNode.removeChild(this.$el); 
    document.getElementById('vue').appendChild(this.$el); 
} else { 
    // Place the element back at it's original location. 
} 

このコードは、デバウンスresize方法で配置されています。

それが正常に動作しますが、私は携帯電話上で起動し、デスクトップに戻ってサイズを変更するとき、私は、コンポーネントが最初に初期化された場所の元のDOMの位置を取得する必要があります。

これは、Javascriptの唯一の問題かもしれないが、私は再びそれをバックに置くことができますので、どのように私は、このコンポーネントの正確なDOM位置の元の位置を得ることができますか?

私は、最初の親要素を保存しています

編集:私は再びparentElementに要素を追加するとき

this.parent = this.$el.parentElement; 

これは、しかし、親要素で正しい順序を保証するものではありません。

+1

要素を元に戻すときに置き換えられる隠しマーカー要素を元の位置に配置します。 (私は最初の場所でDOMを再配置する必要がないように設計をリファクタリングすることができればしかし、その前に、私は参照してくださいね...) –

+0

@DanielBeckは良いアイデアのように聞こえます。デザインを変更することはできません。私はフルスクリーンのオーバーレイが必要であり、固定された位置はこれもバグです。したがって絶対的な位置を使用する必要がありますが、相対的なコンテナ内にないことも確認する必要があります。私は他の選択肢がないと恐れています。 –

+0

十分なフェア!もう1つのアプローチは、ウィンドウサイズに基づいた 'v-if'を持つ重複コンポーネントをそれぞれ持つことです。それはDOMを手作業で並べ替えるよりも良いかもしれません。 –

答えて

2

あなたは一度だけのオリジナルparentNodeを保存し、あなたがそれを必要なときにそれを使用したいです。このような何かが働くべきです。設定によっては、insertBeforeとダニエル・ベックの隠れたマーカーのアイデアを使用する必要があります。

if (!this.originalParentNode) { 
    this.originalParentNode = this.$el.parentNode; 
} 
if (this.mobile) { 
    this.$el.parentNode.removeChild(this.$el); 
    document.getElementById('vue').appendChild(this.$el); 
} else { 
    // Place the element back at its original location. 
    this.originalParentNode.appendChild(this.$el); 
} 
関連する問題