在加载时计算<canvas>的大小?

2 html javascript css canvas

<html>
<head>

<style type="text/css">
    canvas { width: 100%; height: 100%; }
</style>

<script>
    function init() {
        canvas = document.getElementById('canvas');
        alert(canvas.width + "x" + canvas.height);
    }
</script>

</head>

<body onload="init();">
    <canvas id="canvas"> </canvas>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

此代码显示样式之前的大小.它是风格后我需要的尺寸.我怎样才能做到这一点?

ide*_*ide 5

您的问题源于画布的内在尺寸与其占用的CSS像素数之间的差异.在HTML规范说:

canvas元素的固有尺寸等于坐标空间的大小,数字以CSS像素解释.但是,元素可以通过样式表任意调整大小.在渲染期间,缩放图像以适合此布局大小.

这意味着您的画布默认为用于绘制图像的坐标的绘图空间为300x150px.但是,CSS规则会将画布拉伸到页面大小(至少在宽度方面).仍然只有300px宽的逻辑绘制,但它将按照页面宽度的100%对应的比例缩放和物理渲染.

无论如何,widthheight属性对应于画布的固有绘图尺寸.由于您关心CSS大小,因此可以使用window.getComputedStyle.

http://jsfiddle.net/3DDsX/

<head>
  <style>
    canvas { width: 100%; height: 100% }
  </style>
  <script>
    function init() {
      var canvas = document.getElementById('canvas');
      var style = getComputedStyle(canvas);
      alert(style.width + ' x ' + style.height);
    }
  </script>
</head>
<body onload="init();">
  <canvas id="canvas"></canvas>
</body>
Run Code Online (Sandbox Code Playgroud)