のサイズを動的に変える時の注意事項

真っ白になります


ちょっとでも、canvasのサイズを変えると真っ白になってしまうので、
画像を再読み込みしましょう。


windowのリサイズイベントでcanvasのサイズを変える例

<html>
  <head>
    <meta http-equiv='Content-type' content='text/html; charset=utf-8'>
    <title>canvas</title>
    <script type='text/javascript' language='javascript' charset='utf-8'>
      // イベントハンドラを追加
      // 引用元 IT戦記:http://d.hatena.ne.jp/amachang/20080517
      function attach(elm, eventType, handler) {
          if (elm.addEventListener) {
              elm.addEventListener(eventType, handler, false);
          }
          else {
              elm.attachEvent('on' + eventType, handler);
          }
      }

      // canvasに画像読み込む 
      function drawImage()
      {
        var img = new Image();
        var canvas = document.getElementsByTagName('canvas')[0];

        img.src = '画像のURL';

        // 画像がDOMに読み込まれたら、canvasに読み込む
        attach(img, 'load', function()
        {
          canvas.getContext('2d').drawImage(img, 0, 0);
        });
      }

      attach(window, 'load', drawImage);
      attach(window, 'resize', function()
      {
        // canvasのサイズ変更
        document.getElementsByTagName('canvas')[0].height='400';

        // 画像を読み込み直さないと、真っ白になる
        drawImage()
      });
    </script>
  </head>
  <body>
    <canvas></canvas>
  </body>
</html>