2013-03-20 14 views
8

Próbuję dostać moje płótna, aby dopasować stronę, kiedy to zrobić:HTML5 Canvas dopasować do okna

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

To idzie właśnie nad poziomo i pionowo, która jest dodanie pasków przewijania. Wielkość, w której następuje przejście, zależy od wielkości pasków przewijania, które są rozliczane zanim jeszcze się tam znajdą (tylko przypuszczenie). To jest to, co się dzieje, w jaki sposób mogę je dopasować do strony bez pasków przewijania.

+1

Dlaczego nie wyłączyć suwaków za pomocą CSS? html, body {overflow: hidden;} –

+0

Dzięki temu powinieneś to teraz zrobić :) – Larry

+0

Zobacz przykład tutaj http://bravenewmethod.wordpress.com/2011/08/28/html5-canvas-layout i urządzenia mobilne/ –

Odpowiedz

12

Ustaw pozycję płótna na absolute. Upewnij się również, że w elemencie zawierającym nie ma wypełnienia lub marginesów.

To jest to, czego używam na wszystkich pełnoekranowych pokazach na płótnie.

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

Full Screen Demo

+1

Uwielbiam to. Bardzo dziękuję –

+0

'canvas { width: 100%; wysokość: 100%; } ' to też działa i zawsze lepiej nie używać pozycjonowania absolutnego. (na przykład, jeśli używasz pozycjonowania bezwzględnego, a płótno jest większe niż strona, nie możesz poruszać się w górę lub w dół). – FedericoCapaldo

1

ten pracował dla mnie

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

Płótno domyślnie ustawiony jest display: inline-block. Zmień go display: block

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

to nie działa dla mnie. (Wersja Chrome 57.0.2987.133 (64-bit)) – keithpjolley

0

miałem ten sam problem, a ja go rozwiązać poprzez usunięcie border.