HTML5 Canvas教程(6)

1.6.1 线性渐变

要使用线性渐变效果填充图形,首先要使用 createLinearGradient() 方法从上下文对象中创建线性渐变对象。 createLinearGradient() 方法的四个参数确定一条虚拟线段,渐变就沿着此条线段的方向。

然后用 addColorStop 方法为线性渐变对象设置渐变线上的关键点的颜色, offset 表示关键点

是在渐变虚拟线段的什么位置, offset 的取值范围是0到1,其中0表示是起始点,1表示是终止点, 0到1之间的值表示是此虚拟线段中间的某一位置。

再将此线性渐变对象作为填充类型赋值给上下文对象的 fillStyle 属性。canvas将根据渐变虚拟线段上关键点的颜色变化填充图形。

如:

<script>

  var grd = context.createLinearGradient(startX, startY, endX, endY);

  grd.addColorStop(offset, color);

  ......   context.fillStyle = grd;   context.fill(); </script>

效果图

 

代码

<!DOCTYPE HTML>

<html>

  <head>

    <style>       body {         margin: 0px;         padding: 0px;

      }

      #myCanvas {

        border: 1px solid #9C9898;

      }

    </style>     <script>

      window.onload = function() {

        var canvas = document.getElementById("myCanvas");         var context = canvas.getContext("2d");

        context.beginPath();         context.moveTo(170, 80);

        context.bezierCurveTo(130, 100, 130, 150, 230, 150);         context.bezierCurveTo(250, 180, 320, 180, 340, 150);         context.bezierCurveTo(420, 150, 420, 120, 390, 100);         context.bezierCurveTo(430, 40, 370, 30, 340, 50);         context.bezierCurveTo(320, 5, 250, 20, 250, 50);         context.bezierCurveTo(200, 5, 150, 20, 170, 80);         context.closePath();

        // 创建线性渐变对象

        var grd = context.createLinearGradient(230, 0, 370, 200);

        // 添加渐变的起点处颜色

        grd.addColorStop(0, "#8ED6FF");

        // 添加渐变终点处的颜色

        grd.addColorStop(1, "#004CB3");         context.fillStyle = grd;         context.fill();

        // 画边缘线         context.lineWidth = 5;         context.strokeStyle = "blue";

        context.stroke();

      };

    </script>

  </head>

  <body>

    <canvas id="myCanvas" width="578" height="200"></canvas>

  </body>

</html>

关于线性渐变的说明

线性渐变的方向是从 createLinearGradient() 方法的 (startX, startY) 点到 (endX,

endY) 点的一条虚拟线段。我在这里用了两个 color stop ,渐变的起始点是淡蓝色,渐变的终止点是深蓝色。Color stop 是指的在虚拟线段上的位置点,范围是0到1,其中0表示是起始点,1表示是终止点。

1.6.2 径向渐变

径向渐变与线性渐变类似,只不过渐变方向不是线段,而是两个圆之间。使用 createRadialGradient() 方法创建渐变对象,参数是渐变起始圆和终止圆。如:

<script>   var grd=context.createRadialGradient(startX, startY, startRadius, endX, endY, endRadius);

  grd.addColorStop(offset, color);

  ......   context.fillStyle = grd;   context.fill();

</script>

效果图

 

代码

<!DOCTYPE HTML>

<html>

  <head>

    <style>       body {         margin: 0px;         padding: 0px;

      }

      #myCanvas {

        border: 1px solid #9C9898;

      }

    </style>     <script>

      window.onload = function() {

        var canvas = document.getElementById("myCanvas");         var context = canvas.getContext("2d");

        context.beginPath();         context.moveTo(170, 80);

        context.bezierCurveTo(130, 100, 130, 150, 230, 150);         context.bezierCurveTo(250, 180, 320, 180, 340, 150);         context.bezierCurveTo(420, 150, 420, 120, 390, 100);         context.bezierCurveTo(430, 40, 370, 30, 340, 50);         context.bezierCurveTo(320, 5, 250, 20, 250, 50);         context.bezierCurveTo(200, 5, 150, 20, 170, 80);         context.closePath();

        // 创建径向渐变对象

        var grd = context.createRadialGradient(238, 50, 10, 238, 50,

200);

        // 设置渐变起始圆处的颜色

        grd.addColorStop(0, "#8ED6FF");

        // 设置渐变终止圆处的颜色

        grd.addColorStop(1, "#004CB3");         context.fillStyle = grd;         context.fill();

        // 画边缘线         context.lineWidth = 5;         context.strokeStyle = "blue";         context.stroke();

      };

    </script>

  </head>

  <body>

    <canvas id="myCanvas" width="578" height="200"></canvas>

  </body>

</html>

1.6.3 图案填充

要实现图案填充功能,首先要用上下文对象的 createPattern() 方法创建一个图案填充对象,

将这个对象赋值给上下文对象的 fillStyle 属性,然后使用 fill() 方法填充图形。

其中 createPattern() 方法需要两个参数,第一个参数是一个图像对象,第二个参数是重复模式,可选的模式是 repeat, repeat-x, repeat-y, 以及 no-repeat,默认情况是 repeat 。

如:

<script>

  var pattern = context.createPattern(imageObj, repeatOption);

  context.fillStyle = pattern;   context.fill(); </script>

效果图

 

代码

<!DOCTYPE HTML>

<html>

  <head>

    <style>       body {         margin: 0px;         padding: 0px;

      }

      #myCanvas {

        border: 1px solid #9C9898;

      }

    </style>     <script>

      window.onload = function() {

        var canvas = document.getElementById("myCanvas");         var context = canvas.getContext("2d");

        var imageObj = new Image();         imageObj.onload = function() {

          var pattern = context.createPattern(imageObj, "repeat");

          context.rect(10, 10, canvas.width - 20, canvas.height - 20);

          context.fillStyle = pattern;           context.fill();

        };

        imageObj.src =

"http://www.html5canvastutorials.com/demos/assets/wood-pattern.png";

      };

    </script>

  </head>

  <body>

    <canvas id="myCanvas" width="578" height="200"></canvas>

  </body>

</html>