HTML5新增了一个<canvas.../>属性。该元素自身并不绘制图形,只是相当于一张空画布。如果开发者需要向<canvas.../>上绘制图形则必须使用JavaScript脚本进行绘制。

为了向<canvas.../>元素上绘图,必须经过如下3步。

获取<canvas.../>元素对应的DOM对象,这是一个Canvas对象。
调用Canvas对象的getContext()方法,该方法返回一个CanvasRenderingContext2D对象,该对象即可绘制图形。
调用CanvasRenderingContext2D对象的方法绘图。
绘制几何图形:
CanvasRenderingContext2D只提供了两个方法来绘制几何图形:

fillRect(double x,double y,double width,double height):填充一个矩形区域。
strokeRect(double x,double y,double width,double height):绘制一个矩形边框。
注:此处的(x,y)坐标相对于画布左上角顶点定位,左上角顶点默认坐标为(0,0),x轴向右为正方向,y轴向下为正方向。

下面程序使用这两个方法来绘制几个简单的矩形:

<!DOCTYPE html>
<html>
<head>
<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> 绘制矩形 </title>
</head>
<body>
<h2> 绘制矩形 </h2>
<canvas id="mc" width="400" height="280"
style="border:1px solid black"></canvas>
<script type="text/javascript">
// 获取canvas元素对应的DOM对象
var canvas = document.getElementById('mc');
// 获取在canvas上绘图的CanvasRenderingContext2D对象
var ctx = canvas.getContext('2d');
// 设置填充颜色
ctx.fillStyle = '#f00';
// 填充一个矩形
ctx.fillRect(30 , 20 , 120 , 60);
// 设置线条颜色
ctx.strokeStyle = "#00f";
// 设置线条宽度
ctx.lineWidth = 10;
// 绘制一个矩形边框
ctx.strokeRect(30 , 130 , 120 , 60);
// 设置线条颜色
ctx.strokeStyle = "#0ff";
// 设置线条连接风格
ctx.lineJoin = "round";
// 绘制一个矩形边框
ctx.strokeRect(80 , 160 , 120 , 60);
// 设置线条颜色
ctx.strokeStyle = "#f0f";
// 设置线条连接风格
ctx.lineJoin = "bevel";
// 绘制一个矩形边框
ctx.strokeRect(130 , 190 , 120 , 60);
</script>
</body>
</html>
效果图:

使用路径绘制圆角矩形:
正如前面所提,CanvasRenderingContext2D对象只提供了两个绘制矩形的方法,并没有直接提供绘制图形,椭圆等几何图形的方法,为了在Canvas上绘制更复杂的图形,必须在Canvas上启用路径,借助于路径来绘制图形。

在Canvas上使用路径,可按如下步骤进行:

beginPath():丢弃任何当前定义的路径并且开始一条新的路径。它把当前的点设置为 (0,0)。

closePath() :方法创建从当前点到开始点的路径。

调用CanvasRenderingContext2D对象的beginPath()方法开始定义路径。
调用CanvasRenderingContext2D的各种方法添加子路径。
调用CanvasRenderingContext2D的closePath()方法关闭路径。
调用CanvasRenderingContext2D的fill()或stroke()方法来填充路径或绘制路径边框。
我们接下来调用调用CanvasRenderingContext2D提供的几个方法来绘制一个圆角矩形:

arcTo(double x1,double y1,double x2,double y2,double radius):向Canvas的当前路径上添加一段弧,确定这段弧的方式是:假设从当前点到P1(x1,y1)绘制一条线条,再从P1(x1,y1)到P2(x2,y2)绘制一条线条,arcTo则绘制一段同时与上面两条线条相切,且半径为radius的圆弧。
lineTo(double x,double y):把Canvas的当前路径从当前结束点连接到x,y对应的点。
moveTo(double x,double y):把Canvas的当前路径的结束点移动到x,y对应的点。
<!DOCTYPE html>
<html>
<head>
<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> arcTo示意 </title>
</head>
<body>
<h2> arcTo示意 </h2>
<canvas id="mc" width="400" height="280"
style="border:1px solid black"></canvas>
<script type="text/javascript">
/*
该方法负责绘制圆角矩形
x1、y2:是圆角矩形左上角的坐标。
width、height:控制圆角举行的宽、高
radius:控制圆角矩形的四个圆角的半径
*/
function createRoundRect(ctx , x1 , y1 , width , height , radius)
{
ctx.beginPath();
// 移动到左上角
ctx.moveTo(x1 + radius , y1);
// 添加一条连接到右上角的线段
ctx.lineTo(x1 + width - radius, y1);
// 添加一段圆弧
ctx.arcTo(x1 + width , y1, x1 + width, y1 + radius, radius);
// 添加一条连接到右下角的线段
ctx.lineTo(x1 + width, y1 + height - radius);
// 添加一段圆弧
ctx.arcTo(x1 + width, y1 + height , x1 + width - radius
, y1 + height , radius);
// 添加一条连接到左下角的线段
ctx.lineTo(x1 + radius, y1 + height);
// 添加一段圆弧
ctx.arcTo(x1, y1 + height , x1 , y1 + height - radius , radius);
// 添加一条连接到左上角的线段
ctx.lineTo(x1 , y1 + radius);
// 添加一段圆弧
ctx.arcTo(x1 , y1 , x1 + radius , y1 , radius);
ctx.closePath();
}
// 获取canvas元素对应的DOM对象
var canvas = document.getElementById('mc');
// 获取在canvas上绘图的CanvasRenderingContext2D对象
var ctx = canvas.getContext('2d');
ctx.lineWidth = 3;
createRoundRect(ctx , 30 , 30 , 200 , 100 , 20);
ctx.stroke();
</script>
</body>
</html>
效果图:

HTML5实现绘制几何图形的更多相关文章

  1. HTML5绘制几何图形

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  2. 学习笔记:HTML5 Canvas绘制简单图形

    HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...

  3. 使用 HTML5 Canvas 绘制出惊艳的水滴效果

    HTML5 在不久前正式成为推荐标准,标志着全新的 Web 时代已经来临.在众多 HTML5 特性中,Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作 ...

  4. 使用html5 canvas绘制图片

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  5. 使用html5 canvas绘制圆形或弧线

    注意:本文属于<html5 Canvas绘制图形入门详解>系列文章中的一部分.如果你是html5初学者,仅仅阅读本文,可能无法较深入的理解canvas,甚至无法顺畅地通读本文.请点击上述链 ...

  6. html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  7. 【项目1-1】使用HTML5+CSS3绘制HTML5的logo

    作为一个WEB小萌新,自学了有一段时间,总是感觉停滞不前.最近反思中,想到前贤一句话:书读百遍其义自见.说到底,还是项目做的少,如果做多了,想必自然会得心应手. 利用HTML5+CSS3绘制HTML5 ...

  8. HTML5图形绘制

    要在HTML5中绘制图形,首先要放置一个canvas元素 <canvas id="canvas" width="400" height="300 ...

  9. 解决html5 canvas 绘制字体、图片与图形模糊问题

    html5 canvas 绘制字体.图片与图形模糊问题 发生情况 多出现在高dpi设备,这意味着每平方英寸有更多的像素,如手机,平板电脑.当然很多高端台式电脑也有高分辨率高dpi的显示器. canva ...

随机推荐

  1. __name__='main' 这句代码是什么意思?《读书笔记》

    当我们阅读 别人的python代码都会有 if name == "main"这么一行语句,但却不知道为什么要写这个?有什么用 想知道这段代码什么意思让我们来根据例子来测试一下 我们 ...

  2. python基础练习题4

    题目:现有一个数据库记录文件(0005.txt)保证了学生课程签到的数据记录('2017-03-13 11:50:09',271,131),('2017-03-14 11:52:19',273,131 ...

  3. 跨站请求伪造CSRF:攻击与防御

    CSRF是什么         (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为&quo ...

  4. 【CF896C】Willem, Chtholly and Seniorious

    ODT模板题,ODT适合随机数据下具有维护区间推平操作的序列维护题目,时间复杂度较为玄学.. 代码如下 #include <bits/stdc++.h> #define pb push_b ...

  5. scrapy五大核心组件和中间件以及UA池和代理池

    五大核心组件的工作流程 引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. ...

  6. [每日一讲] Python系列:字典

    #! /usr/bin/python # coding:utf-8 """ DATA STRUCTURE Container: Mapping (Another cont ...

  7. git的clone和github的fork

    git的clone是从github上下载下来,clone到项目里面,fork是在本地修改后再提交到github上,在github上用request来进行提交,经作者确认后可以合同到mast分支上

  8. python导入不同目录下的自定义模块

    一.代码目录结构 自定义的模块在Common包下,Study文件下SelectionSort.py文件导入自定义的模块 二.源码 2.1:SelectionSort.py文件   python导包默认 ...

  9. linux常用的镜像(centos、kali、redhat等)官方下载地址

    常用的linux版本: Redhat:https://developers.redhat.com/topics/linux/ Centos:https://www.centos.org/downloa ...

  10. AngularJS的目录结构

    templates/ _login.html _feed.html app/ app.js controllers/ LoginController.js FeedController.js dire ...