HTMLのcanvasタグは、JavaScriptで気軽に画像やグラフィックを扱うことができて面白いので色々と試している。
個人的に作っているものの中で、canvasタグのサイズをブラウザの画面サイズにあわせて変更したいことが多いので、サンプルを作った。
※ブラウザのウインドウサイズを変更して試してください。ウインドウサイズに応じてcanvasに描かれた画像が伸縮するのが分かります。
ポイント
HTML部分
canvasタグは、divタグでくくっておく。(divタグに内包するのが1番のポイント)
canvasタグの幅と高さは指定しなくて大丈夫です。起動時にJavaScriptプログラム側で変更します。
<div id="wrapper">
<canvas id="canvas" width="" height=""></canvas>
</div>
CSS部分
canvasのdisplayはblock にして、html, bodyとcanvasタグを内包したdivタグ要素は幅・高さを100%にしておく。
#canvas{
display: block;
}
html, body, #wrapper{
width: 100%;
height: 100%;
}
JavaScript部分
キャンバスのサイズを再設定する際に、divタグ側のoffsetWidthとoffsetHeightを指定するようにする。
canvas.width = wrapper.offsetWidth;
canvas.height = wrapper.offsetHeight;
プログラム全体
サンプルのプログラムでは、ウィンドウのリサイズイベントが発生した際に上記の処理を行っています。
こうすることで常にキャンバスが画面いっぱいに表示されることになります。
以下にサンプルプログラム全体を示します。
サンプル(⇒こちら)では、画面いっぱいに指定した画像ファイルを表示しています。(サンプルの画像の絵柄が見苦しいのはわたしの絵心によるものなのでお許し下さい!)
index.html
5 | < meta name = "viewport" content = "width=device-width,user-scalable=yes" > |
6 | < script src = "main.js" ></ script > |
7 | < title >キャンバスのサイズを画面サイズに合わせて変更</ title > |
24 | < canvas id = "canvas" width = "" height = "" ></ canvas > |
main.js
7 | let $id = function (id){ return document.getElementById(id); }; |
13 | let IMG_COOLMAN = "coolman.png" ; |
20 | canvas.width = wrapper.offsetWidth; |
21 | canvas.height = wrapper.offsetHeight; |
23 | g.drawImage(img, 0, 0, canvas.width, canvas.height); |
29 | window.addEventListener( "resize" , function (){ |
36 | window.addEventListener( "load" , function (){ |
38 | wrapper = $id( "wrapper" ); |
40 | canvas = $id( "canvas" ); |
41 | g = canvas.getContext( "2d" ); |
47 | img.src = IMG_COOLMAN; |
48 | img.onload = function (){ |
49 | g.drawImage(img, 0, 0, canvas.width, canvas.height); |
コメント