如何在调整窗口大小时始终将画布保持在 this demo 中心(包括滚动条出现时)? canvas元素应该始终填充窗口。
我尝试使用left
,margin-left
等设置(包括负值),但无济于事。
答案 0 :(得分:3)
这是你想要的吗?
这是您的代码的重构版本,它在窗口调整大小时将画布大小调整为窗口的最小尺寸(宽度或高度)。它还将画布的display
设置为block
,并使用margin: 0 auto
将其居中。
这是demo。
UPDATE 1 我已经重构了注释,以显示在何处更改代码以将画布调整为窗口高度和宽度之间的最大尺寸。
更新2 我已经重构以适应画布,因此十字准线始终通过将宽度和高度设置为精确窗口来居中。
我还更新了CSS以删除所有填充和边距。
在window.onresize
上重绘了画布。
var canvas = document.createElement('canvas');
document.body.appendChild(canvas);
function setSize() {
var w = window.innerWidth;
var h = window.innerHeight;
//var size = (h > w) ? h : w; //<<<< resize to largest between height and width
//var size = (h < w) ? h : w; //<<<< resize to smallest between height and width
//canvas.width = size;
//canvas.height = size;
canvas.width = w; //<<<< exact resizing to width
canvas.height = h; //<<<< exact resizing to height
}
function draw() {
var context = canvas.getContext('2d');
context.fillRect(0, 0, canvas.width, canvas.height);
context.strokeStyle = 'red';
context.moveTo(canvas.width/2, 0);
context.lineTo(canvas.width/2, canvas.height);
context.moveTo(0, canvas.height/2);
context.lineTo(canvas.width, canvas.height/2);
context.stroke();
}
setSize();
draw();
window.onresize = function(e) {
setSize();
draw();
};
* {
padding: 0;
margin: 0;
}
canvas {
display: block;
margin: 0 auto;
}
答案 1 :(得分:0)
答案 2 :(得分:0)
你可以做点什么 帆布{ 位置:固定; 上:-500px; }
答案 3 :(得分:0)
要使画布随页面调整大小,请尝试添加窗口调整大小侦听器:
window.addEventListener("resize", function () {
canvas.width = window.innerWidth;
canvas.width = window.innerHeight;
});
如果要删除边距以使画布填满整个页面,请尝试将以下CSS添加到页面中:
body {
margin: 0 !important;
padding: 0 !important;
}
答案 4 :(得分:0)
经过多次摆弄,我想我已经明白了。这是working demo(fullscreen version)。我最终使用了以下循环:
function render() {
requestAnimationFrame(render);
window.scrollTo(
document.documentElement.scrollWidth/2 - window.innerWidth/2,
document.documentElement.scrollHeight/2 - window.innerHeight/2
);
}
requestAnimationFrame(render);
自动将窗口滚动到整个可滚动区域的中间(包括不可见部分),减去观看区域本身大小的一半。
感谢大家的帮助!