HTML5 > Canvasで線形グラデーションを描く

今日の課題:Canvasで線形グラデーションを描く



<!DOCTYPE html>
<html>
    <head>
        <title>HTML5の練習@ヒッキープログラミングスレ</title>
        <style type="text/css">
            body { background-color: silver; }
            canvas { background-color: white; }
        </style>
    </head>
    <body>
        <h4>線形グラデーションを描く</h4>
        <canvas id="mycanvas" width="640" height="480"></canvas>
        <script language="javascript" type="text/javascript">
 
            function rad(d) {
                return 2.0 * Math.PI * (d / 360.0);
            }
 
            function mydraw() {
                var canvas = document.getElementById('mycanvas');
                var ctx = canvas.getContext('2d');
                ctx.beginPath();
 
                var grad = ctx.createLinearGradient(0, 0, 0, 100);
 
                grad.addColorStop( 0.0, 'rgb(255,0,0)');
                grad.addColorStop( 0.5, 'rgb(0,255,0)');
                grad.addColorStop( 1.0, 'rgb(0,0,255)');
 
                ctx.fillStyle = grad;
                ctx.rect(0, 0, 100, 100);
                ctx.fill();
 
                ctx.fillRect(110, 50, 100, 100);
 
 
                grad = ctx.createLinearGradient(250, 0, 450, 0);
                grad.addColorStop(0.0, 'yellow');
                grad.addColorStop(0.5, 'magenta');
                grad.addColorStop(1.0, 'cyan');
 
                ctx.fillStyle = grad;
                ctx.fillRect(250, 0, 200, 100);
 
 
                grad = ctx.createLinearGradient(50, 200, 250, 400);
                grad.addColorStop(0.1, 'yellow');
                grad.addColorStop(0.6, 'green');
                grad.addColorStop(0.9, 'blue');
 
                ctx.beginPath();
                ctx.fillStyle = grad;
                ctx.moveTo(150, 300);
                ctx.arc(150, 300, 100, rad(15), rad(360 - 15), false);
                ctx.fill();
 
            }
 
            mydraw();
 
        </script>
    </body>
</html>
 


  • createLinearGradient(x0,y0,x1,y1) 線形グラデーションを準備する
    (x0,y0)から(x1,y1)にかけて線形グラデーションにする
  • addColorStop(p,c) 線形グラデーションの色の指定する。
    pには(x0,y0)から(x1,y1)までの線分の長さを1としたときの色の位置、cはStyleSheet(CSS)で指定する色を文字列で指定する
  • rect(x,y,w,h) 長方形を描く、strokeRect()/fillRect()は直接長方形を描くが
    rect()はlineTo()やarc()などと同じようにbeginPath()カレント座標の影響を受けるしstroke()やfill()メソッドを読んで線を確定する必要がある
  • closePath()を呼び出す前や新たにbeginPath()を呼ぶ前にstroke()やfill()を再度呼び出すと後で指定した色で全部描きなおされてしまう(strokeRect()/fillRect()などは影響を受けない)
    (closePath()を呼んでも意味無くてbeginPath()を呼ばない限り影響を受ける)

タグ:

+ タグ編集
  • タグ:
最終更新:2016年05月11日 06:01