-->Canvas的基础知识
-->基本路径的绘制
-->绘制简单图形
-->文字的绘制
-->图形的阴影
<canvas id="myCanvas" width="200" height="200">< /canvas>
canvas元素自身有两个属性:width和height,除此之外,canvas还拥有所有主要的HTML5属性,
比如说class、id和 name等。id属性被用在上面所示的代码中,JavaScript使用这里创建的canvas的id来表示要在上面绘画的画布。
JavaScript使用document.getElementById()方法来确定正确的画布,如下面代码所示:
var cvs = document.getElementById("myCanvas");
如下面代码所示。就目前的情况来说,官方规范只承认一个2D环境:
var ctx = cvs.getContext("2d");
在标识画布并指明了它的上下文之后,就可以开始绘画了
ctx.moveTo(x,y): 路径移到画布中的指定点 , 即起点
ctx.lineTo(x,y) :添加一个新点,画线
......
ctx.closePath() :关闭绘制路径
ctx.fillStyle:用来设置填充颜色
ctx.fill() :填充已定义好的路径
ctx.lineWidth:画线的宽度
ctx.strokeStyle:用来设置描边颜色
ctx.stroke() :绘制已定义好的路径
三、绘制简单图形
1、矩形的绘制
2、圆形的绘制
arc(x,y,r,sa,ea,true/false):
x、y为圆心坐标,r为半径,
sa、ea分别为起始角度和结束角度,
true是逆时针画圆,false是顺时针画圆;
360度角即2PI弧度,1度就是2PI/360=PI/180弧度,
90度就是2PI/360*90=PI/2弧度(其他的角度自行计算)
![]()
二次贝塞尔曲线,一个控制点,一个结束点
bezierCurveTo (cx1,cy1,cx2,cy2,ex,ey)
三次贝塞尔曲线,两个控制点,一个结束点
![]()
四、文字的绘制
fillText(text,x,y,maxWidth): 填充绘制
text表示文字 x、y为坐标
maxWidth可选,为文字最大宽度,防止文字溢出
strokeText(text,x,y,maxWidth): 描边绘制
text表示文字 x、y为坐标
maxWidth可选,为文字最大宽度,防止文字溢出;
font 文本内容的当前字体属性
示例: ctx.font = 'bold 60px 微软雅黑';
textAlign 文本内容的当前对齐方式
示例: ctx.textAlign=“left/center/right”;
textBaseline 绘制文本时使用的当前文本基线
示例: ctx.textBaseline=“ top/middle/ bottom ”;
![]()
shadowColor:设置阴影颜色
shadowBlur:设置阴影模糊级别
shadowOffsetX:设置阴影在x轴上距离图形的距离
shadowOffsetY:设置阴影在y轴上距离图形的距离
![]()
x : 清除起点横坐标
y : 清除起点纵坐标
width : 清除长度
height : 清除高度
清除画布:
ctx.clearRect(0,0,cvs.width,cvs.height);
-->基本路径的绘制
-->绘制简单图形
-->文字的绘制
-->图形的阴影
一、Canvas的基础知识
<canvas>标签的基本结构如下:<canvas id="myCanvas" width="200" height="200">< /canvas>
canvas元素自身有两个属性:width和height,除此之外,canvas还拥有所有主要的HTML5属性,
比如说class、id和 name等。id属性被用在上面所示的代码中,JavaScript使用这里创建的canvas的id来表示要在上面绘画的画布。
JavaScript使用document.getElementById()方法来确定正确的画布,如下面代码所示:
var cvs = document.getElementById("myCanvas");
IE 6 7 8不支持 <canvas>标签
每个画布都必须要有一个context(上下文)的定义,如下面代码所示。就目前的情况来说,官方规范只承认一个2D环境:
var ctx = cvs.getContext("2d");
在标识画布并指明了它的上下文之后,就可以开始绘画了
二、基本路径的绘制
ctx.beginPath() :开始一个路径ctx.moveTo(x,y): 路径移到画布中的指定点 , 即起点
ctx.lineTo(x,y) :添加一个新点,画线
......
ctx.closePath() :关闭绘制路径
ctx.fillStyle:用来设置填充颜色
ctx.fill() :填充已定义好的路径
ctx.lineWidth:画线的宽度
ctx.strokeStyle:用来设置描边颜色
ctx.stroke() :绘制已定义好的路径
三、绘制简单图形
1、矩形的绘制
rect(x,y,w,h):
x、y为起始坐标,w、h为矩形的宽、高
支持这么写:ctx.fillRect(x,y,w,h)
ctx.strokeRect(x,y,w,h)
2、圆形的绘制
arc(x,y,r,sa,ea,true/false):
x、y为圆心坐标,r为半径,
sa、ea分别为起始角度和结束角度,
true是逆时针画圆,false是顺时针画圆;
360度角即2PI弧度,1度就是2PI/360=PI/180弧度,
90度就是2PI/360*90=PI/2弧度(其他的角度自行计算)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-绘图流程</title>
<style>
*{margin:0;padding:0;list-style: none;}
#myCanvas{
margin:20px auto 0;
background: #eee;
border:1px solid #666;
}
</style>
</head>
<body>
<canvas id="myCanvas"width="800" height="800">亲,别再用古董浏览器了
!</canvas>
</body>
<script>
/*绘制图形-流程*/
//绘制三角形--填充颜色
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
ctx.beginPath();//开始一个路径
ctx.moveTo(50,50);//起点
ctx.lineTo(350,50);//添加一个新点-画线
ctx.lineTo(200,200);//路径点
// ctx.lineTo(50,50);
ctx.closePath();//关闭绘制路径--自动闭合终点和起点
ctx.fillStyle='green';//设置填充颜色
ctx.fill();//填充已定义好的路径
//绘制三角形--边框
ctx.beginPath();//开始一个路径
ctx.moveTo(400,50);//起点
ctx.lineTo(700,50);//添加一个新点-画线
ctx.lineTo(550,200);//路径点
// ctx.lineTo(50,50);
ctx.closePath();//关闭绘制路径--自动闭合终点和起点
ctx.lineWidth=4;//绘制线宽4px
ctx.strokeStyle='red'//设置描边颜色
ctx.stroke();//绘制已定义好的路径
//绘制一个矩形
ctx.beginPath();//开始一个路径
ctx.moveTo(50,250);//起点
ctx.lineTo(350,250);//添加一个新点-画线
ctx.lineTo(350,400);//路径点
ctx.lineTo(50,400);//路径点
// ctx.lineTo(50,50);
ctx.closePath();//关闭绘制路径--自动闭合终点和起点
ctx.fillStyle='red';//设置填充颜色
ctx.fill();//填充已定义好的路径
ctx.lineWidth=4;//绘制线宽4px
ctx.strokeStyle='#333'//设置描边颜色
ctx.stroke();//绘制已定义好的路径
//绘制矩形快速方法
ctx.beginPath();
ctx.rect(400,250,300,150);
ctx.closePath();
ctx.fillStyle='blue';//设置填充颜色
ctx.fill();//填充已定义好的路径
ctx.lineWidth=4;//绘制线宽4px
ctx.strokeStyle='orange'//设置描边颜色
ctx.stroke();//绘制已定义好的路径
//绘制矩形快速方法
ctx.beginPath();
ctx.fillStyle='orange';//若不设置会继承上面动画的颜色
ctx.fillRect(50,450,300,100);
ctx.strokeStyle='blue';
ctx.strokeRect(50,450,300,100);
ctx.closePath();
//圆形绘制
ctx.beginPath();
ctx.arc(450,500,80,0,2*Math.PI,false);
ctx.closePath();
ctx.fillStyle='red';
ctx.fill();
//半圆
ctx.beginPath();
ctx.arc(650,500,80,0,Math.PI,true);
ctx.closePath();
ctx.fillStyle='red';
ctx.fill();
//半圆
ctx.beginPath();
ctx.arc(650,500,80,0,Math.PI,false);
ctx.closePath();
ctx.fillStyle='blue';
ctx.fill();
</script>
</html>
<!-- IE 6 7 8不支持 <canvas>标签 -->3、贝塞尔曲线
quadraticCurveTo (cx,cy,ex,ey)二次贝塞尔曲线,一个控制点,一个结束点
bezierCurveTo (cx1,cy1,cx2,cy2,ex,ey)
三次贝塞尔曲线,两个控制点,一个结束点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-绘制贝塞尔曲线</title>
<style>
*{margin:0;padding:0;list-style: none;}
#myCanvas{
margin:20px auto 0;
background: #eee;
border:1px solid #666;
}
</style>
</head>
<body>
<canvas id="myCanvas"width="600" height="600">亲,别再用古董浏览器了
!</canvas>
</body>
<script>
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
//二次贝塞尔曲线,一个控制点,一个结束点
ctx.beginPath();//开始一个路径
ctx.moveTo(66,34);//起点
ctx.quadraticCurveTo(551,50,220,57);
ctx.lineWidth=4;
ctx.strokeStyle='red';
ctx.stroke();
ctx.closePath();//关闭绘制路径--自动闭合终点和起点
//三次贝塞尔曲线,两个控制点,一个结束点
ctx.beginPath();//开始一个路径
ctx.moveTo(62,180);//起点
ctx.bezierCurveTo(398,333,56,100,277,151);
ctx.lineWidth=4;
ctx.strokeStyle='#666';
ctx.stroke();
ctx.closePath();
</script>
</html>
<!-- IE 6 7 8不支持 <canvas>标签 -->四、文字的绘制
fillText(text,x,y,maxWidth): 填充绘制
text表示文字 x、y为坐标
maxWidth可选,为文字最大宽度,防止文字溢出
strokeText(text,x,y,maxWidth): 描边绘制
text表示文字 x、y为坐标
maxWidth可选,为文字最大宽度,防止文字溢出;
font 文本内容的当前字体属性
示例: ctx.font = 'bold 60px 微软雅黑';
textAlign 文本内容的当前对齐方式
示例: ctx.textAlign=“left/center/right”;
textBaseline 绘制文本时使用的当前文本基线
示例: ctx.textBaseline=“ top/middle/ bottom ”;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-filltext-绘制文字</title>
<style>
*{margin:0;padding:0;list-style: none;}
#myCanvas{
background: #eee;
border:1px solid #666;
}
.box{
width:400px;
height:200px;
border:1px solid red;
position: absolute;
left:200px;
top:100px;
}
</style>
</head>
<body>
<!-- 画布宽高写在标签里- -->
<canvas id="myCanvas" width="600" height="600">亲,别再用古董浏览器了
!</canvas>
<div class="box"></div>
<button id="btn">清除</button>
</body>
<script>
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
ctx.beginPath();
ctx.font='bold 60px 微软雅黑';
// ctx.textBaseline='bottom';//textBaseline 绘制文本时使用的当前文本基线
ctx.textBaseline='middle';
// ctx.textBaseline='top';
// ctx.textAlign='center';//对齐方式
ctx.fillText('画布填充文字',200,100);
ctx.closePath();
btn.onclick=function(){
ctx.clearRect(0,0,400,200);//清除局部画布
// ctx.clearRect(0,0,cvs.width,cvs.height);//清除局部画布
}
</script>
</html>五、图形的阴影
阴影属性:shadowColor:设置阴影颜色
shadowBlur:设置阴影模糊级别
shadowOffsetX:设置阴影在x轴上距离图形的距离
shadowOffsetY:设置阴影在y轴上距离图形的距离
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-图形的阴影</title>
<style>
*{margin:0;padding:0;list-style: none;}
#myCanvas{
margin:20px auto 0;
background: #eee;
border:1px solid #666;
}
</style>
</head>
<body>
<canvas id="myCanvas"width="600" height="600">亲,别再用古董浏览器了
!</canvas>
</body>
<script>
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
ctx.beginPath();
ctx.arc(150,150,100,0,2*Math.PI,true);
ctx.closePath();
ctx.shadowColor='red';
ctx.shadowBlur=20;
ctx.shadowOffsetX=10;
ctx.shadowOffsetY=10;
ctx.fillStyle='blue';
ctx.fill();
ctx.beginPath();
ctx.arc(400,150,100,0,2*Math.PI,true);
ctx.closePath();
ctx.shadowColor='red';
ctx.shadowBlur=20;
ctx.shadowOffsetX=5;
ctx.shadowOffsetY=5;
ctx.fillStyle='#fff';
ctx.fill();
ctx.beginPath();
ctx.fillStyle='blue';
ctx.shadowColor='#000';
ctx.shadowBlur=10;
ctx.shadowOffsetX=5;
ctx.shadowOffsetY=5;
ctx.fillRect(50,300,200,100);
ctx.closePath();
ctx.beginPath();
ctx.fillStyle='green';
ctx.shadowColor='#000';
ctx.shadowBlur=10;
ctx.shadowOffsetX=-5;
ctx.shadowOffsetY=-5;
ctx.fillRect(300,300,200,100);
ctx.closePath();
</script>
</html>
<!-- IE 6 7 8不支持 <canvas>标签 -->
六、清除画布
ctx.clearRect(x,y,width,height):x : 清除起点横坐标
y : 清除起点纵坐标
width : 清除长度
height : 清除高度
清除画布:
ctx.clearRect(0,0,cvs.width,cvs.height);
用canvas实现各种效果:
1-canvas-碰壁反弹:
<span style="font-size:14px;"><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-碰壁反弹</title>
<style>
*{margin:0;padding:0;list-style: none;}
#myCanvas{
background: #eee;
border:1px solid #666;
}
.box{
width:800px;
height: 600px;
margin:0 auto;
}
</style>
</head>
<body>
<div class="box">
<canvas id="myCanvas"width="800" height="600">亲,别再用古董浏览器了
!</canvas>
</div>
</body>
<script>
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
var x=0,y=0;
var flagh=true,flagv=true;//标记运动方向
setInterval(function(){
//每次画之前清除之前画的
ctx.clearRect(0,0,cvs.width,cvs.height);
if (flagh) {
x++;
if (x>=cvs.width-50) {
flagh=false;
}
}else{
x--;
if (x<=0) {
flagh=true;
}
}
if (flagv) {
y++;
if (y>=cvs.height-50) {
flagv=false;
}
}else{
y--;
if (y<=0) {
flagv=true;
}
}
ctx.beginPath();
ctx.fillStyle='blue';
ctx.fillRect(x,y,50,50);
ctx.closePath();
},2)
</script>
</html></span>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>canvas-拖拽画画</title>
<style>
*{margin:0;padding:0;list-style: none;}
body{background: #000;}
#myCanvas{
background: #eee;
border:1px solid #666;
cursor:pointer;
}
.box{
width:1000px;
height: 600px;
margin:0 auto;
}
</style>
</head>
<body>
<div class="box">
<canvas id="myCanvas"width="1000" height="600">亲,别再用古董浏览器了
!</canvas>
<button id="btn">清除</button>
</div>
</body>
<script>
var cvs=document.getElementById('myCanvas');//画纸
var ctx=cvs.getContext('2d');//画笔
var x=0,y=0;
var btn=document.getElementById('btn');
btn.onclick=function(){
ctx.clearRect(0,0,cvs.width,cvs.height);
}
cvs.onmousedown=function(ev){
var e=ev||window.event;
x=e.clientX-cvs.offsetLeft;//起点X
y=e.clientY-cvs.offsetTop;//起点Y
ctx.beginPath();
ctx.moveTo(x,y);
document.onmousemove=function(ev){
var e=ev||window.event;
x=e.clientX-cvs.offsetLeft;//移动点X
y=e.clientY-cvs.offsetTop;//移动点Y
ctx.lineTo(x,y);
ctx.lineWidth=4;
ctx.strokeStyle='red'
ctx.stroke();
}
document.onmouseup=function(){
// ctx.closePath();
document.onmousemove=null;
}
}
</script>
</html>
本文介绍Canvas的基本使用方法,包括创建画布、绘制路径、图形、文字及阴影效果,并通过实例展示了碰撞反弹和拖拽画画的功能。
2771

被折叠的 条评论
为什么被折叠?



