HTML5 <canvas>
元素不接受其width
和height
屬性的相對大小(百分比)。HTML Canvas的相對大小
我想要完成的是讓我的畫布相對於窗口大小。這是我想出到目前爲止,但我不知道是否有這更好的辦法:
- 簡單
- 不需要在
<div>
包裹<canvas>
。 - 不依賴於jQuery的(我用它來獲取父div的寬/高)
- 理想情況下,瀏覽器調整大小不重繪(但我認爲這可能是一個要求)
請參閱下面的代碼,它在屏幕中間繪製一個圓圈,寬度爲40%,最大爲400px。
現場演示:http://jsbin.com/elosil/2
代碼:
<!DOCTYPE html>
<html>
<head>
<title>Canvas of relative width</title>
<style>
body { margin: 0; padding: 0; background-color: #ccc; }
#relative { width: 40%; margin: 100px auto; height: 400px; border: solid 4px #999; background-color: White; }
</style>
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>
function draw() {
// draw a circle in the center of the canvas
var canvas = document.getElementById('canvas');
var relative = document.getElementById('relative');
canvas.width = $(relative).width();
canvas.height = $(relative).height();
var w = canvas.width;
var h = canvas.height;
var size = (w > h) ? h : w; // set the radius of the circle to be the lesser of the width or height;
var ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(w/2, h/2, size/2, 0, Math.PI * 2, false);
ctx.closePath();
ctx.fill();
}
$(function() {
$(window).resize(draw);
});
</script>
</head>
<body onload="draw()">
<div id="relative">
<canvas id="canvas"></canvas>
</div>
</body>
</html>
謝謝。有趣的是,如果你想把它放在中心,你看起來像* do *需要將'canvas'包裝在'div'中。 'margin:0 auto'似乎並不像畫一個div那樣將畫布居中。 – Portman
@Portman不,你還可以。我只是忘記把display:block放在canvas樣式中(它的默認是inline-block,它不會以這種方式進行居中)。使用此修復程序更新答案。 – sethobrien