私の画面にはcanvas
が4つあり、上に2つ、下に2つあります。HTML offsetLeft変更の遅延
それぞれには、キャンバスを最大にし、他を隠すボタンがあります。
このボタンは、各キャンバスの上に配置され、絶対位置はキャンバスのoffsetTop
とoffsetLeft
に基づいています。
ただし、キャンバスを最大化または最小化すると、ボタン式はwidth
プロパティのみを更新します。
奇妙なことは、resize
も呼び出す画面のサイズを変更すると、すべてが適切な場所に移動するということです。
EDIT:追加情報:私はVueJSを使用していますと、他のキャンバスを隠すために、私は彼らにのみ親divs
を、v-show="false"
を適用display: none
を適用します。
一部抜粋:
初期リサイズとリスナー:
window.onload = function() {
resizeAll();
window.addEventListener('resize', resizeAll, false);
};
リサイズハブ:
function resizeAll() {
vue.$refs.panelOne.resizeDefault();
// ...
vue.$refs.panelN.resizeDefault();
}
パネルのサイズ変更デフォルトとメソッドのサイズを変更します。の伝播である
私はSPHINXに同意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
};
}
おそらく人々があなたを助けることができるようにスニペット全体を添付したいと思うでしょう。あなたのスニペットをVueから分離できない場合は、https://codesandbox.io/s/vue – deathangel908
を使用できます。キャンバスのサイズを変更し、次にボタンを再描画してみてください。キャンバスのoffsetTopとLeftの値は、ボタンを再描画するときに更新されないことがあります。引き続き動作しない場合は、setTimeOutを使用します。 –
スニペットを追加しました。基本的に、setTimeoutを適用すると動作します。しかし、私はもっと簡単な解決法を選びたいと思っています。それ以外のものがうまく動作しない場合、私はその答えを受け入れることをうれしく思います。 – Luiz