2016-08-30 44 views
1

我製作了一個小型網頁遊戲,我使用下面的代碼將遊戲縮放到頁面大小。HTML5畫布,適合屏幕的其餘部分

var canvas = document.getElementById("game"); 
var ctx = canvas.getContext("2d"); 
canvas.width = window.innerWidth; 
canvas.height = window.innerHeight; 
document.body.appendChild(canvas); 
// Attempt at auto-resize 
function resize_canvas(){ 
    if (canvas.width != window.innerWidth) 
    { 
     canvas.width = window.innerWidth; 
    } 
    if (canvas.height != window.innerHeight) 
    { 
     canvas.height = window.innerHeight; 
    } 
} 
window.addEventListener("resize", resize_canvas); 
window.addEventListener("orientationchange", resize_canvas); 

但是,我現在使用一些CSS在遊戲的頂部添加一個菜單,我遇到了問題。 遊戲需要內部窗口的大小,所以隨遊戲一起顯示的內容將導致內容不適合瀏覽器。

我該如何讓遊戲「填充」窗口的其餘部分?

(我已經找到了如何擴展遊戲窗口的問題,但我想比賽,以填補窗口,而不是)

的圖像來演示以下問題:

(注意滾動條,我想以消除)

enter image description here

編輯: 我是很新的Web開發,但我有感覺的CSS並沒有真正在畫布上工作得很好。

+1

試'HTML,身體{溢出:隱藏; }'在你的css – Vashtamyty

+0

@ Vashtamyty這樣做,但它仍然使我的遊戲窗口比它應該更大,但只是不吸引外面呢? 我可以製作一個div(縮放到頁面),然後將菜單和遊戲放入其中,並使該div適合屏幕? – Paul

+0

儘管我認爲CSS不能有效地改變畫布大小(它只能縮放它,但不會改變顯示的像素數量)。 – Paul

回答

0

如果您刪除導航高度?

var canvas = document.getElementById("game"); 
var ctx = canvas.getContext("2d"); 
var menu = document.getElementById('nav') 
resize_canvas(); 
document.body.appendChild(canvas); 

// Attempt at auto-resize 
function resize_canvas(){ 
    canvas.width = window.innerWidth; 
    canvas.height = window.innerHeight - menu.offsetHeight; 
} 
window.addEventListener("resize", resize_canvas); 
window.addEventListener("orientationchange", resize_canvas); 

canvas { 
    position:relative; 
} 
+0

我在想那個,但這聽起來像是一個相當「黑客」的解決方案。 如果有人放大(這不應該是可能的,但不能真正阻止它)。菜單會增長,但變量將被硬編碼,菜單會重疊等。 – Paul

+0

啊,沒關係,變量沒有硬編碼,你通過id獲得元素,所以它應該在縮放時工作。唯一的小問題是,當我放入其他物體時,它不會「動態地」工作,但我並沒有真的想這麼做。 – Paul

+0

「其他對象」是什麼意思? – Quentin