热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTML5系列:HTML5绘图

1.canvas元素基础canvas元素是HTML5中新增的一个重要元素,专门用来绘制图形。在页面中使用canvas元素绘制图形需要经过的三个步骤:步骤一使用canvas元素创建一个
1. canvas元素基础

  canvas元素是HTML5中新增的一个重要元素,专门用来绘制图形。

  在页面中使用canvas元素绘制图形需要经过的三个步骤:

  步骤一  使用canvas元素创建一个画布区域,并获取该元素。

  步骤二  通过获取的canvas元素,取得该图形元素的上下文环境对象。

  步骤三  根据取得的上下文环境对象,在页面中绘制图形或动画。

1.1 页面添加canvas元素

<canvas id="cnvMain" width="500" height="300">canvas>

1.2 绘制矩形

  使用canvas元素绘制矩形的步骤:

  1> 获取canvas元素

  使用document.getElementById()方法获取canvas对象,需要调用这个对象提供的方法来进行图形绘制。

  2> 获取上下文(context)

  进行图形绘制时,需要使用图形上下文(graphics context),图形上下文是一个封装了绘图功能的对象。使用canvas对象的getContext()来获得图形上下文。在draw函数中,将参数设置为“2d”。

  3> 填充与绘制边框

  canvas元素绘制图形的两种方式:填充(fill)与绘制边框(stroke),填充是指填满图形内部,绘制边框是绘制图形的边框。canvas元素结合使用这两种方式来绘制图形。

  4> 设置绘图样式(style)

  在进行绘制图形时,先要设定好绘图的样式,再调用方法进行图形绘制。

  设定填充图形样式:fillStyle填充的样式,在该属性中填入填充的颜色值。

  设定图形边框的样式:strokeStyle图形边框的样式,在该属性中填入边框的颜色值。

  5> 指定线宽

  使用图形上下文对象的lineWidth属性设置图形边框的宽度。在绘制图形的时候,任何直线都可以通过lineWidth属性来指定直线的宽度。

  6> 指定颜色值

  绘图时填充的颜色或边框的颜色分别通过fillStyle属性与strokeStyle属性来指定。颜色值使用CSS中使用的颜色值。

  7> 绘制矩形

  分别使用fillRect()与strokeRect()来填充矩形和绘制矩形边框。

context.fillRect(x, y, width, height)

  其中,x表示矩形起点x轴与左上角(0, 0)之间的距离,y表示矩形起点y轴与左上角(0, 0)之间的距离,width表示矩形的宽度,height表示矩形的高度。

context.strokeRect(x, y, width, height)

  其中x,y为矩形起点坐标,width为矩形宽度,height为矩形高度。

context.clearRect(x, y, width, height)

  清空图形中指定区域的像素,清空后的区域为透明色。

  HTML代码

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillStyle
= "#EEEEFF";
context.fillRect(
0, 0, 500, 300);
context.fillStyle
= "red";
context.strokeStyle
= "blue";
context.lineWidth
= 1;
context.fillRect(
50, 50, 100, 100);
context.strokeRect(
50, 50, 100, 100);
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

2. 使用路径

  在页面的canvas元素中,调用绘画路径的moveTo()及lineTo()方法可以绘制直线,调用arc()方法可以绘制指定位置与大小的圆形。

2.1 moveTo与lineTo的用法

  在canvas元素中,如果要绘制直线,通常使用moveTo()与lineTo()两个方法。moveTo()方法用于将画笔移至指定点并以改点为直线的开始点,调用格式:

context.moveTo(x, y)

  其中,x为移至起点的横坐标,y为移至起点的纵坐标。调用该方法后,canvas中即设置了一个绘制直线的开始点。如果是绘制直线还需要调用lineTo()方法,该方法将用画笔从指定的起点坐标与传递的终点坐标参数直接绘制一条直线。调用格式:

context.lineTo(x, y)

  其中,x为移至的终点横坐标,y为移至终点的纵坐标。该方法可以反复使用,第一次调用后,画笔自动移至终点坐标位置;第二次调用时,又以该坐标位置作为第二次调用时的起点位置,开始绘制直线。当直线路径绘制完成后,调用stroke()方法在canvas中描边直线路径,最终在canvas中展示直线效果,调用格式:

context.stroke()

  stroke()方法无参数,用于绘制完路径后对路径进行描边处理。

  HTML代码

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.moveTo(
200, 30);
context.lineTo(
30, 100);
context.lineTo(
200, 200);
context.lineWidth
= 1;
context.stroke();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

  设置描边颜色:

context.strokeStyle = "red";

2.2 绘制圆形

  在canvas中,使用context对象中的arc()方法描绘圆形路径,以及绘制各种形状的圆形图案,调用格式:

context.arc(x, y, radius, startAngle, endAngle, anticlockwise)

其中,x表示绘制圆形的横坐标,y表示绘制圆形的纵坐标,radius表示绘制圆形的半径,单位为像素,startAngle表示绘制圆弧时开始角度,endAngle表示绘制圆弧时结束的角度,anticlockwise是一个布尔值,表示十分按顺时针绘制,如果为“true”表示按顺时针绘制;如果为“false”,表示按逆时针绘制。如果要绘制一个完整的圆形,startAngle的值为0,表示从0弧度开始,参数endAngle的值为Math.PI * 2,表示到360弧度时结束。如果要绘制一个半圆形,startAngle的值为0,endAngle的值为Math.PI * 1,表示到180弧度时结束。

  在调用arc()方法绘制圆形路径之前,需要调用context对象中的beginPath()方法,声明开始绘制路径,调用格式:

context.beginPath()

  在使用遍历或循环绘制路径时,每次都要调用该方法,beginPath()方法仅对应单次的路径绘制。

  绘制圆形路径完成之后,需要调用closePath()方法,将所绘制完成的路径进行关闭,调用格式:

context.closePath()

closePath()是对应单次的路径绘制,在一般情况下,与beginPath()成对使用。

  圆形路径绘制完成之后,并没有真正在canvas元素中展示,需要对路径进行描边或填充。

  描边调用context对象的stroke()方法,在调用之前,可以设置边框的颜色与宽度。

context.strokeStyle = "#CCCCCC";
context.lineWidth = 1;
context.stroke();

  填充调用context对象的fill()方法,在调用之前,可以设置填充的颜色。

context.fillStyle = "#EEEEEE";
context.fill();

  示例

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.beginPath();
context.arc(
100, 100, 50, 0, Math.PI * 2, true);
context.closePath();
context.strokeStyle
= "#666666";
context.lineWidth
= 1;
context.stroke();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.beginPath();
context.arc(
100, 100, 50, 0, Math.PI * 2, true);
context.closePath();
context.strokeStyle
= "#666666";
context.lineWidth
= 1;
context.stroke();

context.fillStyle
= "#CCCCCC";
context.fill();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.beginPath();
context.arc(
100, 100, 50, 0, Math.PI * 2, true);
context.closePath();
context.strokeStyle
= "#666666";
context.lineWidth
= 1;
context.stroke();

context.fillStyle
= "#CCCCCC";
context.fill();

context.beginPath();
context.arc(
175, 100, 50, 0, Math.PI * 2, true);
context.closePath();
context.strokeStyle
= "#666666";
context.lineWidth
= 1;
context.stroke();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

3. 绘制渐变图形

3.1 绘制线性渐变

  渐变是指在填充时从一种颜色慢慢过渡到另一种颜色。线性渐变时需要使用context对象的createLinearGradient()方法,该方法定义:

context.createLinearGradient(xStart, yStart, xEnd, yEnd)

其中,xStart为渐变起始点的横坐标,yStart为渐变起始点的纵坐标,xEnd为渐变结束点的横坐标,yEnd为渐变结束点的纵坐标。

  在LinearGradient对象之后,使用addColorStop()方法进行设定,该方法定义:

context.addColorStop(offset, color)

其中,offset为所设定的颜色离开渐变起始点的偏移量,该参数的值是一个范围在0到1之间的浮点值,渐变起始点的偏移量为0,渐变结束点的偏移量为1。color为绘制时使用的颜色。

  因为是渐变,所以至少需要使用两次addColorStop()方法以追加两个颜色,可以追加多个颜色。

  接着把fillStyle设定为LinearGradient对象,执行fill()方法填充,可以绘制出渐变图形。

  示例

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var gl = context.createLinearGradient(0, 0, 0, 300);
gl.addColorStop(
0, "blue");
gl.addColorStop(
1, "red");
context.fillStyle
= gl;
context.fillRect(
0, 0, 500, 300);
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>
DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.beginPath();
context.arc(
100, 100, 50, 0, Math.PI * 2, true);
context.closePath();
var gl = context.createLinearGradient(0, 0, 0, 150);
gl.addColorStop(
0, "blue");
gl.addColorStop(
1, "red");
context.fillStyle
= gl;
context.fill();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图

3.2 绘制径向渐变

  径向渐变是指沿着圆形的半径方向向外进行扩散的渐变方式,使用context对象的createRadialGradient()方法绘制径向渐变,方法定义:

context.createRadialGradient(xStart, yStart, radiusStart, xEnd, yEnd, radiusEnd)

其中,xStart为渐变开始圆的圆心横坐标,yStart为渐变开始圆的圆心纵坐标,radiusStart为开始圆的半径,xEnd为渐变结束圆的圆心横坐标,yEnd为渐变结束圆的圆心纵坐标,radiusEnd为结束圆的半径。

DOCTYPE html>

<html>
<head>
<meta name="viewport" content=" />
<title>Indextitle>
<script type="text/Javascript">
window.onload
= function () {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var gnt = context.createRadialGradient(30, 30, 0, 20, 20, 400);
gnt.addColorStop(
0, "#000000");
gnt.addColorStop(
0.3, "#EEEEEE");
gnt.addColorStop(
1, "#FFFFFF");
context.beginPath();
context.arc(
125, 95, 80, 0, Math.PI * 2, true);
context.closePath();
context.fillStyle
= gnt;
context.fill();

context.beginPath();
context.arc(
125, 95, 80, 0, Math.PI * 2, true);
context.closePath();
context.strokeStyle
= "#666666";
context.lineWidth
= 1;
context.stroke();
}
script>
head>
<body>
<canvas id="canvas" width="500" height="300">canvas>
body>
html>

  效果图


推荐阅读
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
Eva绫波_772
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有