Tôi có bốn canvas
trong màn hình của tôi, đặt hai ở trên và hai bên dưới.HTML offsetLeft độ trễ để thay đổi
Mỗi người có một nút để có thể tối đa hóa canvas, ẩn những người khác.
Nút này được đặt ở trên mỗi canvas, với vị trí tuyệt đối dựa trên offsetTop
và offsetLeft
của canvas.
Tuy nhiên, khi tôi tối đa hóa hoặc thu nhỏ canvas, công thức nút chỉ cập nhật thuộc tính width
.
Điều lạ lùng là nếu tôi thay đổi kích thước màn hình, cũng gọi hàm resize
, mọi thứ diễn ra đúng nơi.
EDIT: Thông tin thêm: Tôi đang sử dụng VueJS và, để ẩn các vải khác, tôi áp dụng v-show="false"
với họ mẹ divs
, mà chỉ áp dụng display: none
.
Một số đoạn:
thay đổi kích thước ban đầu và người nghe:
window.onload = function() {
resizeAll();
window.addEventListener('resize', resizeAll, false);
};
Hub thay đổi kích thước:
function resizeAll() {
vue.$refs.panelOne.resizeDefault();
// ...
vue.$refs.panelN.resizeDefault();
}
mặc định thay đổi kích thước của bảng điều khiển và thay đổi kích thước phương pháp. Các "expandStyles" là phong cách css áp dụng cho các nút:
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();
}
Và cuối cùng, thu khí chiều:
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
};
}
Bạn có thể muốn đính kèm toàn bộ đoạn mã để mọi người có thể giúp bạn. Nếu không thể tách đoạn mã của bạn khỏi Vue, bạn có thể sử dụng https://codesandbox.io/s/vue – deathangel908
Thử thay đổi kích thước canvas của bạn và vẽ lại nút của bạn. Giá trị offsetTop và Left của canvas có thể không được cập nhật khi bạn vẽ lại nút. Nếu nó tiếp tục không hoạt động, hãy sử dụng một setTimeOut. –
Đã thêm các đoạn trích khác. Về cơ bản, áp dụng setTimeout nó hoạt động. Tuy nhiên, tôi muốn chọn một giải pháp đơn giản hơn. Nếu không có gì khác hoạt động, tôi vui mừng chấp nhận câu trả lời. – Luiz