2013-03-20 96 views
8

我試圖讓我的畫布,以適合頁面,當我這樣做:HTML5畫布適合窗口

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

它去剛過水平和垂直方向這是增加滾動條。 它的大小是關於滾動條的大小正在考慮之前,他們甚至在那裏(只是一個猜測),這是怎麼回事,我怎麼會得到它適合頁面沒有滾動條。

+1

爲什麼不禁用CSS滾動條? html,body {overflow:hidden;} – 2013-03-20 14:21:53

+0

感謝您應該考慮到這一點,現在將不得不做:) – Larry 2013-03-20 14:34:34

+0

請看這裏的例子http://bravenewmethod.wordpress.com/2011/08/28/html5-canvas-layout - 移動設備/ – 2013-03-20 15:11:09

回答

12

將畫布位置設置爲absolute。還要確保沒有填充或包含元素中設置的頁邊距。

這就是我在我所有的全屏畫布演示中使用的。

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

Full Screen Demo

+1

喜歡它。非常感謝你 – 2017-02-01 14:25:41

+0

'canvas {width} {width} 100%; 身高:100%; }' 這也適用,最好不要使用絕對定位。 (例如,如果您使用絕對定位並且畫布大於頁面,則無法向上或向下移動)。 – FedericoCapaldo 2017-05-19 06:18:54

1

這爲我工作

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

默認畫布設置爲display: inline-block。將其更改爲display: block

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

這不適合我。 (Chrome版本57.0.2987.133(64位)) – keithpjolley 2017-10-23 17:52:57

0

我有同樣的問題,我通過刪除border解決它。