HTML5:Canvas

canvas画图已经在JavaScript中介绍了http://blog.csdn.net/qq_27626333/article/details/51595138。此处再进行补充。

1、颜色的指定方法

颜色指定有3种:第一种是以[#RRGGBB]这种与HTML中相同的颜色指定方法指定颜色。第二种方法为在rgb()中指定三个0~255范围的值;第三种方法是除了指定三个0~255范围的数值外,同时指定透明度(数值范围;0~1)。

context.fillStyle="#FF0000";
context.fillStyle="rgb(255,0,0)";
context.fillStyle="rgba(255,0,0,0.5)";  

2、stroke()和fill()方法

stroke()方法绘制路径,fill()方法填充路径。例如:制作一个当用户触摸屏幕时在触摸位置绘制一个三角形的实例程序:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>stroke()方法绘制路径</title>
</head>
<body>
<canvas id="drawing" width="200" height="200" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//设置canvas的onmouse事件
drawing.onmousedown=function(event){
//取得触摸处的坐标
var x=event.x;
var y=event.y;
var r=Math.random()*10+5;
//路径指定
context.beginPath();
context.moveTo(x,y);
context.lineTo(x,y+r);
context.lineTo(x+r,y+r);
context.lineTo(x,y);
//绘图
context.strokeStyle="red";
//指定路径线的粗细
context.lineWidth=3;
//绘制路径
context.stroke();
}
}
</script>
</body>
</html>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fill()方法填充路径</title>
</head>
<body>
<canvas id="drawing" width="200" height="200" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//路径绘制开始
context.beginPath();
//路径的绘制
context.moveTo(0,0);
context.lineTo(0,100);
context.lineTo(100,100);
//路径绘制结束
context.closePath();
context.fillStyle="rgb(200,0,0)"
context.fill();
}
</script>
</body>
</html> 

3、arcTo()方法

arcTo()方法用于绘制圆弧,context.arcTo(x1,y1,x2,y2,半径)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>arcTo()方法</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//设置canvas的onmouse事件
//路径指定
context.beginPath();
//单独使用arcTo()方法必须指定绘图开始的基点
context.moveTo(20,20);
context.arcTo(290,150,20,280,20);
context.lineTo(20,280);
//绘图
context.strokeStyle="red";
//指定路径线的粗细
context.lineWidth=3;
//绘制路径
context.stroke();
}
</script>
</body>
</html>

4、quadraticCurveTo()和bezierCurveTo()方法

quadraticCurveTo(cx,cy,x,y):从上一点开始绘制一条二次曲线,到(x,y)为止,并且以(cx,cy)作为控制点。

bezierCurveTo(c1x,c1y,c2x,c2y,x,y):从上一点开始绘制一条曲线,到(x,y)为  止,并且以(c1x,c1y)和(c2x,c2y)为控制的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>bezierCurveTo()方法</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//设置canvas的onmouse事件
//路径指定
context.beginPath();
//单独使用bezierCurveTo()方法必须指定绘图开始的基点
context.moveTo(20,20);
context.bezierCurveTo(100,280,180,280,280,20);
//绘图
context.strokeStyle="red";
//指定路径线的粗细
context.lineWidth=3;
//绘制路径
context.stroke();
}
</script>
</body>
</html>  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>quadraticCurveTo()方法</title>
</head>
<body>
<canvas id="drawing" width="200" height="200" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//设置canvas的onmouse事件
//路径指定
context.beginPath();
//单独使用quadraticCurveTo()方法必须指定绘图开始的基点
context.moveTo(20,20);
context.quadraticCurveTo(40,80,130,150);
//绘图
context.strokeStyle="red";
//指定路径线的粗细
context.lineWidth=3;
//绘制路径
context.stroke();
}
</script>
</body>
</html>  

5、createRadialGradient()方法

使用createRadialGradient()方法,这个方法接收6个参数,对应着两个圆的圆心和半径。两个圆的圆心不同时的效果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//设置渐变
var gradient=context.createRadialGradient(30,30,20,170,170,100);
gradient.addColorStop(0,"red");
gradient.addColorStop(0.3,"yellow");
gradient.addColorStop(1,"blue");
//绘制渐变圆形
context.fillStyle=gradient;
context.fillRect(20,20,260,260);
}
</script>
</body>
</html> 

6、绘制图像

(1)、直接绘制:context.drawImage(image,dx,dy);

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<p>Image to use:</p>
<img id="scream"  alt="The Scream" width="220" height="250" src="img_the_scream.jpg">
<p>Canvas:</p>
<canvas id="drawing" width="250" height="250" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
var image=document.getElementById("scream");
image.onload = function() {
context.drawImage(image,10,10);
}
}
</script>
</body>
</html>  

(2)、尺寸修改::context.drawImage(image,dx,dy,dw,dh);

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<p>Image to use:</p>
<img id="scream"  alt="The Scream" width="220" height="250" src="img_the_scream.jpg">
<p>Canvas:</p>
<canvas id="drawing" width="250" height="250" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
var image=document.getElementById("scream");
image.onload = function() {
context.drawImage(image,10,10,100,100);
}
}
</script>
</body>
</html>  

(3)、图像截取::context.drawImage(image,sx,sy,sw,sh,dx,dy,dw,dh);

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<p>Image to use:</p>
<img id="scream"  alt="The Scream" width="220" height="250" src="img_the_scream.jpg">
<p>Canvas:</p>
<canvas id="drawing" width="250" height="250" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
var image=document.getElementById("scream");
image.onload = function() {
context.drawImage(image,20,20,70,100,10,10,220,250);
}
}
</script>
</body>
</html>  

7、绘制数据图表

(1)、绘制方格图

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="250" height="250" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//描绘背景
var gradient=context.createLinearGradient(0,0,0,300);
gradient.addColorStop(0,"#e0e0e0");
gradient.addColorStop(1,"#ffffff");
context.fillStyle=gradient;
context.fillRect(0,0,drawing.width,drawing.height);
//描绘边框
var grid_cols=10;
var grid_rows=10;
var cell_height=drawing.height/grid_rows;
var cell_width=drawing.width/grid_cols;
context.lineWidth=1;
context.strokeStyle="#a0a0a0";
//开始边框描绘
context.beginPath();
//准备画横线
for(var row=0;row<=grid_rows;row++){
var y=row*cell_height;
context.moveTo(0,y);
context.lineTo(drawing.width,y);
}
//准备画竖线
for(var col=0;col<=grid_cols;col++){
var x=col*cell_width;
context.moveTo(x,0);
context.lineTo(x,drawing.height);
}
//完成描述
context.stroke();
}
</script>
</body>
</html>  

(2)、数据表

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
//定义图表数据
var uriage=[80,92,104,110,68,50,45,90,74,68,98,103];
drawChart(uriage);
//绘制折线数据图表的函数
function drawChart(data){
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//描绘背景
var gradient=context.createLinearGradient(0,0,0,300);
gradient.addColorStop(0,"#e0e0e0");
gradient.addColorStop(1,"#ffffff");
context.fillStyle=gradient;
context.fillRect(0,0,drawing.width,drawing.height);
//描绘边框
var grid_cols=data.length+1;
var grid_rows=4;
var cell_height=drawing.height/grid_rows;
var cell_width=drawing.width/grid_cols;
context.lineWidth=1;
context.strokeStyle="#a0a0a0";
//开始边框描绘
context.beginPath();
//准备画横线
for(var row=0;row<=grid_rows;row++){
var y=row*cell_height;
context.moveTo(0,y);
context.lineTo(drawing.width,y);
}
//准备画竖线
for(var col=0;col<=grid_cols;col++){
var x=col*cell_width;
context.moveTo(x,0);
context.lineTo(x,drawing.height);
}
//完成描述
context.stroke();
context.closePath();
//获取数据中最大的值
var max_v=0;
for(var i=0;i<data.length;i++){
if(data[i]>max_v)
max_v=data[i];
}
//为了能让最大值能容纳在图表内,计算坐标
max_v=max_v*1.1;
//将数据换算为坐标
var points=[];
for(var i=0;i<data.length;i++){
var v=data[i];
var px=cell_width*(i+1);
var py=drawing.height-drawing.height*(v/max_v);
points.push({"x":px,"y":py});
}
//描绘折线图
context.beginPath();
context.moveTo(points[0].x,points[0].y);
for(var i=1;i<points.length;i++){
context.lineTo(points[i].x,points[i].y);
}
context.lineWidth=2;
context.strokeStyle="#ee0000";
context.stroke();
//绘制坐标图形(坐标对应一红色圆圈)
for(var i in points){
var p=points[i];
context.beginPath();
context.arc(p.x,p.y,6,0,2*Math.PI);
context.fillStyle="#ee0000";
context.fill();
}
}
}
</script>
</body>
</html>  

8、移动与扩大/缩小

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
function drawRect(context,color){
context.fillStyle=color;
context.fillRect(20,20,50,50);
}
//绘制普通的矩形
drawRect(context,"red");
//移动矩形以及扩大/缩小矩形
context.translate(30,30);//平行移动
context.scale(2.5,0.8);//长扩大2.5倍、宽缩小至0.8倍
drawRect(context,"blue");//绘制移动、扩大/缩小后的矩形
}
</script>
</body>
</html>  

9、canvas实现动画效果

(1)、圆球跳动的动画

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//记录圆球的状态
var ball={x:10,y:100,dir_x:5,dir_y:5};
//动画
setInterval(drawBall,100);
function drawBall(){
//绘制背景
context.fillStyle="#F5F5F5"
context.fillRect(0,0,300,300);
//绘制圆球
context.beginPath();
context.arc(ball.x,ball.y,5,0,2*Math.PI);
context.fillStyle="blue";
context.fill();
    //让圆球动起来
ball.x+=ball.dir_x;
ball.y+=ball.dir_y;
if(ball.x<0||ball.x>300){ball.dir_x*=-1;}
if(ball.y<0||ball.y>300){ball.dir_y*=-1;}

}
}
</script>
</body>
</html>  

           

(2)待机动画

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>canvas绘图</title>
</head>
<body>
<canvas id="drawing" width="300" height="300" style="border:#0F0 solid 1px">A Drawing of something</canvas>
<script>
var drawing=document.getElementById("drawing");
//确定浏览器支持<canvas>元素
if(drawing.getContext){
//取得绘图上下文对象的引用,“2d”是取得2D上下文对象
var context=drawing.getContext("2d");
//动画绘制开始
var ci=0;
anim();
//定义动画函数
function anim(){
context.clearRect(0,0,300,300);//清空canvas
//循环绘制36根长方形棒棒
for(var i=0;i<36;i++){
context.save();
//旋转
var r=(i*10)*Math.PI/180;//度转换为弧度
context.translate(150,150);//移动中心店
context.rotate(r);
//绘制细长方形
if(i==ci){
context.globalAlpha=1.0;//设置透明度
}else{
context.globalAlpha=0.3;
}
context.beginPath();
context.fillStyle="green";
context.rect(0,0,50,6);
context.fill();
context.restore();
}
ci=(ci+1)%36;
//每隔20微秒调用函数本身,实现动画效果。
setTimeout(anim,20);
}
}
</script>
</body>
</html>  

       

时间: 2024-08-12 01:08:56

HTML5:Canvas的相关文章

HTML5 CSS3 专题 :canvas 实现彩票刮刮乐

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的,有兴趣的可以改成android版本的,或者其他的~ 效果图: 贴一张我中500w的照片,咋办啊,怎么花呢~ 好了,下面开始原理: 1.刮奖区域两个Canvas,一个是front , 一个back ,front遮盖住下面的canvas. 2.canvas默认填充了一个矩形,将下面canvas效果图遮盖

第八讲:HTML5中canvas实现小球击打小方块游戏

源代码:http://download.csdn.net/detail/liumingm900913/7469969 游戏开发流程: 1.创建画布: 将画布放在div标签里面,这样可以控制画布居中的位置,在对div标签加上一些样式,利于观看 <div id="main"> <!--将画布嵌在div块里面,使其可以居中--> <canvas id="liuming_canvas" width="300px" heigh

HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签原型 <canvas width=”1000” height=”1000” id=”myCanvas”> 您的浏览器版本过低,不支持HTML5新增的canvas标签. </canvas> 使用js获取该画布,并指定对象 <script> Var canvasID = doc

HTML5 画布 Canvas

利用html5的canvas元素使用 JavaScript 在网页上绘制图像. 通过规定尺寸.颜色和位置,来绘制一个圆: <!DOCTYPE htma> <html> <body> <canvas id="myCanvas" width="200" height="100" style="border:1px solid #3CF;"> Your browser does not

HTML5中canvas介绍

1.什么是Canvas canvas 是 HTML5 提供的一个用于展示绘图效果的标签 canvas 提供了一个空白的图形区域,可以使用特定的JavaScript API来绘画图形(canvas 2D或WebGL) 首先由 Apple 引入的,用于OS X的仪表盘 和 Safari 浏览器 1.1 关于Canvas的一些说明 canvas 是一个矩形区域的画布,可以用JavaScript在上面绘画.控制其每一个像素. canvas 标签使用 JavaScript 在网页上绘制图像,本身不具备绘图

引言:Canvas绘图API快速入门

引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏动画效果的原理是怎样的?本篇文章将带您在20分钟内快速了解和上手HTML5游戏开发的神器:Canvas绘制API. 一.Canvas是什么? Canvas就是一个画布,可以进行画任何的线.图形.填充等一系列的操作,而且操作的画图就是js,所以让js编程到了嗑药的地步.另外Canvas不仅仅提供简单的

HTML5 画布canvas元素

HTML5 画布canvas元素 HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小看了这个画布,它能实现无限的可能性.接下来我们从最简单的部分开始,逐步认识Canvas的强大功能. 1.在页面中添加canvas元素: 默认情况下,Canvas所创建的矩形区域大小为宽300像素,高150像素,不过我们可以使用width和height属性来自定义画布

HTML5在canvas中绘制复杂形状附效果截图

HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路径. closePath() : 通过绘制一条当前点到路径起点的线段来闭合形状. fill() , stroke() : 填充形状或绘制空心形状. moveTo() : 将当前点移动到点(x,y). lineTo() : 从当前点绘制一条直线到点(x,y). arc(x,y,r,sAngle,eAn

HTML5之Canvas画正方形

1.设计源码 <!DOCTYPE html> <head> <meta charset="utf-8" /> <title>HTML5之Canvas画正方形</title> <script type="text/javascript"> function drawFour(id) { //获取canvas元素 var canvas = document.getElementById("