我希望在div中包含畫布元素的響應式頁面。我應該能夠簡單地將一個畫布元素包裝在另一個塊元素中,併爲該畫布提供相對寬度。雖然這種方法適用於Chrome,Firefox,Safari和Opera,或IE當然是美中不足的!我還沒有嘗試舊版本的IE9然後 - 如預期在IE9這個簡單的代碼示例不起作用:如何在IE9中實現響應式畫布高度
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test IE9 Canvas Height</title>
<style>
body {
margin: 0;
padding: 0;
}
#container {
position: relative;
padding-top: 32%;
background-color: #88f;
}
.instruments {
position: absolute;
bottom: 0%;
width: 100%;
padding-bottom: 16%;
background-color: #8f8;
}
#circle {
position: absolute;
left: 42%;
width: 16%;
}
</style>
</head>
<body>
<div id="container">
<div class="instruments">
<canvas id="circle"></canvas>
</div>
</div>
<script>
var canvas = document.getElementById("circle");
var ctx = canvas.getContext("2d");
// Default canvas is 300x150, so make it square
canvas.height = canvas.width;
ctx.beginPath();
ctx.arc(canvas.width/2, canvas.height/2, canvas.width/2, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
</script>
</body>
</html>
這個簡單的頁面應該呈現高度的藍色塊體寬度的32%,然後綠色的另一個塊與底部1/2重疊。內部div內部是一個畫布元素,它沒有明確設置高度和寬度 - 因此它可以保持各種窗口/主體寬度的流暢性。畫布應繪製一個圓形的紅色圓圈,其高度完全包含在其包含的div內。除了IE9以外,其他瀏覽器都能很好地工作(除了我認爲的IE10外)。
即使我做指定畫布大小,
<canvas id="circle" width="300" height="300"></canvas>
它仍然無法正常工作。
有什麼我做錯了,還是有更好的方法來實現這個目標?我不想對像素或點的大小進行設計或編碼,而傾向於避免使用JavaScript IE攻擊。謝謝
如果要調整畫布的大小而不是CSS,請在resize事件處理函數中使用canvas.width和canvas.height。如果您必須使用CSS調整大小,請使用相同的百分比調整寬度和高度。 – markE
我欣賞提示,但我不想調整大小的事件處理程序。很抱歉,我只是嘗試將css高度設置爲100%,並且它在這個簡單的示例中起作用。這樣做在我的真實網頁上不起作用,所以我現在必須找出差異。如果問題仍然存在,我會發布後續行動。 – Scotty
FWIW,我認爲IE11的行爲改變了,以匹配其他瀏覽器。 – EricLaw