在dom内部移动Vue组件?

时间:2017-07-18 12:34:33

标签: javascript vue.js vuejs2 vue-component

如果我在移动设备上,我会在dom中移动Vue组件,因为我想使用绝对定位并且想要确保我不在relative容器内。

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位置的原始位置,以便我可以将其重新放回去?

修改

我用以下内容保存初始父元素:

this.parent = this.$el.parentElement;

虽然我再次将元素追加回parentElement,但这并不保证父元素中的正确顺序。

1 个答案:

答案 0 :(得分:5)

您只想保存原始parentNode一次,并在需要时使用它。这样的事情应该有效。根据您的设置,您可能需要将insertBefore与Daniel Beck的隐藏标记构思一起使用。

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);
}