2013-03-20 1 views
8

Ich versuche, meine Leinwand zu bekommen um die Seite zu passen, wenn ich das tue:HTML5 Canvas passen Fenster

ctx.canvas.width = window.innerWidth; 
ctx.canvas.height = window.innerHeight; 

Es geht nur über horizontal und vertikal, die Bildlaufleisten erweitert. die Größe, die es geht über die Größe der Bildlaufleisten werden berücksichtigt, bevor sie überhaupt da sind (nur eine Vermutung) ist das was passiert, wie würde ich gehen, um es auf die Seite ohne Bildlaufleisten passen.

+1

Warum nicht die Bildlaufleisten mit CSS deaktivieren? html, body {overflow: hidden;} –

+0

Danke sollte daran gedacht, muss für jetzt tun :) – Larry

+0

Siehe Beispiel hier http://bravenewmethod.wordpress.com/2011/08/28/html5-canvas-layout -und-mobile-devices/ –

Antwort

12

Legen Sie die Leinwandposition auf absolute fest. Stellen Sie außerdem sicher, dass im umschließenden Element keine Abstände oder Ränder festgelegt sind.

Dies ist, was ich auf allen meinen Vollbild-Leinwanddemos benutze.

body, html { 
    width: 100%; 
    height: 100%; 
    margin: 0; 
    padding: 0; 
    overflow: hidden; 
} 
canvas { 
    position:absolute; 
} 

Full Screen Demo

+1

Liebe es. Vielen Dank –

+0

'Leinwand { Breite: 100%; Höhe: 100%; } ' das funktioniert auch, und es ist immer besser, keine absolute Positionierung zu verwenden. (Wenn Sie beispielsweise die absolute Positionierung verwenden und die Arbeitsfläche größer als die Seite ist, können Sie nicht nach oben oder unten verschieben). – FedericoCapaldo

1

Das ist für mich gearbeitet

function resize() { 

    var canvas = document.getElementById('game'); 
    var canvasRatio = canvas.height/canvas.width; 
    var windowRatio = window.innerHeight/window.innerWidth; 
    var width; 
    var height; 

    if (windowRatio < canvasRatio) { 
     height = window.innerHeight; 
     width = height/canvasRatio; 
    } else { 
     width = window.innerWidth; 
     height = width * canvasRatio; 
    } 

    canvas.style.width = width + 'px'; 
    canvas.style.height = height + 'px'; 
}; 

window.addEventListener('resize', resize, false); 
1

Die Leinwand standardmäßig display: inline-block gesetzt. Ändern Sie ihn auf display: block

body { 
    margin: 0; 
    padding: 0; 
} 
canvas { 
    display: block; 
} 
+0

das hat nicht für mich funktioniert. (Chrome-Version 57.0.2987.133 (64-Bit)) – keithpjolley

0

hatte ich das gleiche Problem, und ich löste es durch die border entfernen.