Ist das, was Sie wollten?
Dies ist eine refaktorierte Version Ihres Codes, die die Größe der Leinwand an die kleinste Dimension des Fensters (Breite oder Höhe) bei der Fenstergrößenänderung anpasst. Es setzt auch display
des Canvas auf block
und verwendet margin: 0 auto
, um es zu zentrieren.
Hier ist die demo.
AKTUALISIEREN 1 Ich habe mit Kommentaren umgestaltet, um anzuzeigen, wo der Code geändert werden muss, um die Zeichenfläche auf die größte Dimension zwischen Fensterhöhe und Fensterbreite zu ändern.
UPDATE 2 Ich habe eine Umgestaltung vorgenommen, damit die Fadenkreuze immer zentriert sind, indem die Breite und Höhe auf das genaue Fenster eingestellt werden.
Ich habe auch das CSS aktualisiert, um alle Abstände und Ränder zu entfernen.
Die Leinwand wird unter window.onresize
neu gezeichnet.
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; \t //<<<< exact resizing to width
canvas.height = h; \t //<<<< 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;
}
Entschuldigung für das Missverständnis, mein Ziel ist es nicht, die Bildlaufleisten zu verbergen, sondern die Leinwand zentriert, wenn das Fenster in der Größe geändert wird (im Wesentlichen, um die Bildlaufleisten immer zentriert zu machen). – user76284
nicht sicher, was du meinst. In der Fidel ist die Mitte des Kreuzes in allen Breiten in der Mitte. –
Wenn die Bildlaufleisten angezeigt werden, wird die Leinwand nicht mehr zentriert und bleibt stattdessen oben links hängen. – user76284