网格
在真正开始之前,我们需要先探讨 canvas 的网格(grid)或者坐标空间(coordinate space)。在前一页的HTML模板里有一个150像素宽, 150像素高的 canvas 对象。我在画面上叠加上默认网格,如图。通常网格的1个单元对应 canvas 上的1个像素。网格的原点是定位在左上角(坐标(0,0))。画面里的所有物体的位置都是相对这个原点。这样,左上角的蓝色方块的位置就是距左边x像素和距上边Y像素(坐标(x, y))。后面的教程中我们将学会如何把移动原点,旋转以及缩放网格。不过现在我们会使用默认的状态。
绘制图形
不像 SVG,canvas 只支持一种基本形状——矩形,所以其它形状都是有一个或多个路径组合而成。还好,有一组路径绘制函数让我们可以绘制相当复杂的形状。
矩形
我们首先看看矩形吧,有三个函数用于绘制矩形的:
fillRect(x,y,width,height); //绘制一个实心矩形
strokeRect(x,y,width,height); //绘制一个矩形轮廓
clearRect(x,y,width,height); //清空特定区域并使其完全透明
它们都接受四个参数, x 和 y 指定矩形左上角(相对于原点)的位置,width 和 height 是矩形的宽和高。好,实战一下吧。
下面就是上页模板里的 draw() 函数,但添加了上面的三个函数。
绘制矩形的例子
function draw(){
var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
ctx.fillRect(25,25,100,100);
ctx.clearRect(45,45,60,60);
ctx.strokeRect(50,50,50,50);
}
}
出来的结果应该和右边的是一样的。fillRect 函数画了一个大的黑色矩形(100x100),clearRect 函数清空了中间 60x60 大小的方块,然后strokeRect 函数又在清空了的空间内勾勒出一个 50x50 的矩形边框。在接下去的页面里,我们会看到和 clearRect 函数差不多另外两个方法,以及如何去改变图形的填充和边框颜色。
与下一节的路径函数不一样,这三个函数的效果会立刻在 canvas 上反映出来。
绘制路径
不像画矩形那样的直截了当,绘制路径是需要一些额外的步骤的。
beginPath();
closePath();
stroke();
fill();
第一步是用 beginPath 创建一个路径。在内存里,路径是以一组子路径(直线,弧线等)的形式储存的,它们共同构成一个图形。每次调用 beginPath,子路径组都会被重置,然后可以绘制新的图形。
第二步就是实际绘制路径的部分,很快我们就会看到。
第三步是调用 closePath 方法,它会尝试用直线连接当前端点与起始端点来关闭路径,但如果图形已经关闭或者只有一个点,它会什么都不做。这一步不是必须的。
最后一步是调用 stroke 或 fill 方法,这时,图形才是实际的绘制到 canvas 上去。stroke 是绘制图形的边框,fill 会用填充出一个实心图形。
注意:当调用 fill 时,开放的路径会自动闭合,而无须调用 closePath 。
画一个简单图形(如三角形)的代码如下。
ctx.beginPath();
ctx.moveTo(75,50);
ctx.lineTo(100,75);
ctx.lineTo(100,25);
ctx.fill();
moveTo
moveTo 是一个十分有用的方法,虽然并不能用它来画什么,但却是绘制路径的实用方法的一部分。你可以把它想象成是把笔提起,并从一个点移动到另一个点的过程。
它接受 x 和 y (新的坐标位置)作为参数。
当 canvas 初始化或者调用 beginPath 的时候,起始坐标设置就是原点(0,0)。大多数情况下,我们用 moveTo 方法将起始坐标移至其它地方,或者用于绘制不连续的路径。看看下面的笑脸,红线就是使用 moveTo 移动的轨迹。
试一试下面的代码,粘贴到之前用过的 draw 函数内在看看效果吧。
moveTo 的使用示例
ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Mouth (clockwise)
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye
ctx.stroke();
//thegoneheart 完整例子
ctx.beginPath();
ctx.arc(75,75,50,0,Math.PI*2,true); // Outer circle
ctx.moveTo(110,75);
ctx.arc(75,75,35,0,Math.PI,false); // Mouth (clockwise)
ctx.moveTo(65,65);
ctx.arc(60,65,5,0,Math.PI*2,true); // Left eye
ctx.moveTo(95,65);
ctx.arc(90,65,5,0,Math.PI*2,true); // Right eye
ctx.stroke();
ctx.beginPath();
ctx.moveTo(40,75);
ctx.lineTo(60,65);
ctx.lineTo(90,65);
ctx.moveTo(110,75);
ctx.lineTo(125,75);
ctx.stroke();
注意:你可以注释 moveTo 方法来观察那些连接起来的线。
注意:arc 方法的用法见下面。
分享到:
相关推荐
在本篇【canvas学习(十六):绘制时钟】中,我们将探讨HTML5中的Canvas API,它是Web开发中用于在网页上动态绘制图形的强大工具。Canvas API允许开发者使用JavaScript来绘制2D图形,包括简单的线条、形状以及复杂的...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创建复杂的动画以及构建交互式的游戏。这本书《HTML5 Canvas核心技术:图形、动画与游戏开发》由David Geary撰写,深入探讨了Canvas...
在`onDraw()`方法中,系统会为我们提供一个Canvas对象,我们可以调用其方法来绘制图形。 1. **获取Canvas对象** 在`onDraw()`方法中,通过`Canvas canvas = this.getCanvas();`获取Canvas实例。这个canvas就是我们...
canvas 是新的 HTML 元素,可以通过 Script(通常是 JavaScript)绘制图形,用于画图、组合图像,或做简单的动画。 Canvas 教学 Canvas 元素是 WhatWG Web applications 1.0(又称为 HTML 5)规范的一部分。使用...
"canvas:使用canvas绘制图形"这一主题,将深入探讨如何利用JavaScript在Canvas元素上绘制各种形状、图像以及进行动画处理。 Canvas API提供了两个主要的对象:`CanvasRenderingContext2D`和`WebGLRenderingContext`...
HTML5 Canvas 初级入门教程 HTML5 Canvas 是 HTML5 中一个非常重要的功能,它允许开发者在浏览器中绘制图形,而不需要使用...使用 canvas 元素、2d 渲染环境、坐标系统和绘制图形等概念,可以创建出非常漂亮的图形。
《HTML 5 Canvas基础教程》从HTML5和JavaScript(以及jQuery)的基础知识讲起,全面介绍了HTML5Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复画布状态,以及变形、合成、处理图像和视频等,让...
资源名称:HTML5 Canvas基础教程内容简介:《HTML5 Canvas基础教程》从HTML5和Javascript(以及jQuery)的基础知识讲起,全面介绍了HTML5 Canvas的各种特性,包括渲染上下文、坐标系统、绘制图形、保存和恢复...
本教程主要聚焦于使用C#进行图像绘制与处理,利用Canvas这一强大的绘图工具,实现多种图形操作和效果。 首先,我们要了解Canvas是WPF(Windows Presentation Foundation)框架中的一个关键元素,它提供了一个二维...
在HTML5中,Canvas元素提供了一个可编程的2D绘图环境,允许开发者直接在网页上绘制图形。本教程将详细介绍如何使用canvas绘制一个动态的钟表,这涉及到JavaScript和Canvas API的基础知识。 首先,我们需要在HTML...
《draw2d绘制图形教程详解》 在计算机编程领域,可视化和交互式界面设计是不可或缺的部分,而draw2d库正是这样一个专注于二维图形绘制的工具。draw2d库,全称为Draw2D,是一个开源的JavaScript库,它允许开发者在...
Canvas的核心在于2D渲染上下文(2d rendering context),这是一个JavaScript对象,提供了丰富的API用于在Canvas上绘制图形。要获取这个对象,可以使用`getContext('2d')`方法: ```javascript var canvas = ...
`<canvas>` 是一个简单的HTML元素,它主要用于绘制图形和图像。与其他元素如 `<img>` 不同,`<canvas>` 没有内置的源图像属性(如 `src` 和 `alt`),而是通过JavaScript脚本来动态地创建图像。因此,`<canvas>` ...
《PaintFX:绘制图形用户界面》 在Java编程领域中,构建美观且功能丰富的图形用户界面(GUI)是一项重要的任务。PaintFX项目提供了一种工具集,帮助开发者更有效地实现这一目标。本文将深入探讨PaintFX的核心概念、...
在Web开发中,绘制图形是一项重要的技能,它可以让网页变得更加生动和交互性更强。本教程将探讨如何在Web页面上创建动态图形,并提供一个实例源码来帮助理解这一过程。 首先,我们需要了解基本的绘图工具。HTML5...
这通常涉及到两个主要步骤:绘制图形边界(如矩形)和填充图形内部。在Delphi中,可以使用如`DrawRect`和`FillRect`函数来实现这个过程。`DrawRect`用于绘制矩形边框,而`FillRect`用于填充矩形内部。 描述中提到的...
HTML5 canvas 是一种在网页上绘制图形的API,它允许开发者通过JavaScript动态创建和修改二维图形,从而实现丰富的视觉效果。在这个"HTML5 canvas仿屏保动态管道"项目中,我们利用canvas元素来模仿经典的Windows屏保...
**WPF经典教程之Canvas布局** Canvas是WPF中一种特殊的布局控件,它允许开发者对子元素进行绝对定位。在Canvas中,每个子元素的位置是通过设置`Canvas.Left`、`Canvas.Right`、`Canvas.Top`和`Canvas.Bottom`属性来...
Canvas让开发者能够在网页上进行复杂的绘图操作,如绘制图形、图像、动画等等。在HTML5中使用Canvas元素,可以实现客户端绘图,不再完全依赖服务器端生成图片,这大大提高了效率和交互性。 在本文中,将介绍如何...