gpt4 book ai didi

javascript - HTML offsetLeft 延迟更改

转载 作者:太空狗 更新时间:2023-10-29 15:15:51 25 4
gpt4 key购买 nike

我的屏幕上有四个 canvas,两个在上面,两个在下面。

每个都有一个按钮,可以最大化 Canvas ,隐藏其他 Canvas 。

此按钮位于每个 Canvas 上方,绝对位置基于 Canvas 的 offsetTopoffsetLeft

但是,当我最大化或最小化 Canvas 时,按钮公式仅更新 width 属性。

奇怪的是,如果我调整屏幕大小,这也调用了 resize 函数,一切都会到正确的位置。

Initial screen

After maximizing

Then after resizing screen

编辑:附加信息:我正在使用 VueJS,为了隐藏其他 Canvas ,我将 v-show="false" 应用到它们的父 divs,仅适用于 display: none

一些片段:

初始调整大小和监听器:

window.onload = function () {
resizeAll();
window.addEventListener('resize', resizeAll, false);
};

调整大小中心:

function resizeAll () {
vue.$refs.panelOne.resizeDefault();
// ...
vue.$refs.panelN.resizeDefault();
}

面板的默认调整大小和调整大小方法。 "expandStyles"是应用于按钮的 css 样式:

resizeDefault() {
let dimensions;
if (this.expanded) {
dimensions = getScreenDimensions();
} else {
dimensions = getHalfScreenDimensions();
}
this.resize(dimensions.width, dimensions.height);
}

resize (width, height) {
this.canvas.width = width;
this.canvas.height = height;
this.expandStyles.top = (this.canvas.offsetTop + 10) + 'px';
this.expandStyles.left = (this.canvas.offsetLeft + this.canvas.width - 40) + 'px';
drawInterface.redraw();
}

最后,维度 getter :

function getScreenDimensions () {
return {
width: window.innerWidth - 310,
height: window.innerHeight * 0.92
};
}

function getHalfScreenDimensions () {
return {
width: (window.innerWidth - 310) / 2,
height: (window.innerHeight * 0.92) / 2
};
}

最佳答案

我同意 S.P.H.I.N.X 的观点,问题似乎在于将 this.expandStyles 中的 react 属性传播到实际的 DOM。如果您可以共享模板中包含您的 Canvas 和定位应用程序的部分,将会很有用。

与此同时,如果您觉得 setTimeOut 不合适,您可以使用 Vue: nextTick 做一些更“Vue-way”的事情。设置操作顺序(样式重新计算、重绘)。

关于javascript - HTML offsetLeft 延迟更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com