1、应用不同的线型
ctx.lineWidth = value; 线条的宽度,默认为1
ctx.lineCap = type; 设置端点样式, type默认为butt,可选值round,square,butt
ctx.lineJoin = type; 设置连接处样式,type默认为miter,可选值round,bevel,miter
ctx.miterLimit = value; 设置绘制交点的方式,miterLimit属性的作用是斜面的长度设置一个上线,默认为10,当斜面的长度达到线条宽度的10倍时,就会变为斜角,如果lineJoin属性值为round或bevel时,miterLimit属性无效。
a、ctx.lineCap
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d'); var lineCap = ['butt','round','square'];
//绘制参考线
ctx.strokeStyle = 'red';
ctx.beginPath();
ctx.moveTo(10,10);
ctx.lineTo(10,150);
ctx.moveTo(150,10);
ctx.lineTo(150,150);
ctx.stroke();
//绘制直线段
ctx.strokeStyle = 'blue';
for( var i=0; i<lineCap.length; i++){
ctx.lineWidth = 20;
ctx.lineCap = lineCap[i];
ctx.beginPath();
ctx.moveTo(10,30+i*50);
ctx.lineTo(150,30+i*50);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="300"></canvas>
</div>
</body>
</html>
效果展示:
b、ctx.lineJoin
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d'); var lineJoin = ['round','bevel','miter'];
ctx.strokeStyle = 'red'; for( var i=0; i<lineJoin.length; i++){
ctx.lineWidth = 20;
ctx.lineJoin = lineJoin[i];
ctx.beginPath();
ctx.moveTo(10+i*150,30);
ctx.lineTo(100+i*150,30);
ctx.lineTo(100+i*150,100);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="600" height="300"></canvas>
</div>
</body>
</html>
效果展示:
c、miterLimit
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
ctx.translate(30,40);
for( var i=0; i<10; i++){
ctx.strokeStyle = '#FF5D43';
ctx.lineWidth = 10;
ctx.lineJoin = 'miter';
ctx.miterLimit = i*10;
ctx.beginPath();
ctx.moveTo(10,i*30);
ctx.lineTo(100,i*30);
ctx.lineTo(10,i*33);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>
效果显示:
2、绘制线性变化
ctx.createLinearGradient(x1,y1,x2,y2); x1、y1为渐变的起点, x2,y2为渐变的终点
使用addColorStop(position,color)方法进行上色,
eg:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var lingrad = ctx.createLinearGradient(0,0,0,200);
lingrad.addColorStop(0,'#f00');
lingrad.addColorStop(1/7,'#f90');
lingrad.addColorStop(2/7,'#ff0');
lingrad.addColorStop(3/7,'#0f0');
lingrad.addColorStop(4/7,'#0ff');
lingrad.addColorStop(5/7,'#00f');
lingrad.addColorStop(6/7,'#f0f');
lingrad.addColorStop(1,'#f00');
ctx.fillStyle = lingrad;
ctx.strokeStyle = lingrad;
ctx.fillRect(10,10,200,200);
} </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>
3、绘制径向渐变
要绘制径向变化,首先要使用createRadialGradient方法创建canvasGradient。然后即可使用addColorStop方法定义色标的位置并进行上色。
ctx.createRadialGradient(x1,y1,r1,x2,y2,r2); 其中x1,y1,r1定义一个为以(x1,y1)为坐标,半径为r1的圆,x2,y2,r2定义一个为以(x2,y2)为坐标,半径为r2的圆,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var radgrad = ctx.createRadialGradient(55,55,20,100,100,90);
radgrad.addColorStop(0,'#fff');
radgrad.addColorStop(0.5,'#f00');
radgrad.addColorStop(1,'#000'); ctx.fillStyle = radgrad;
ctx.fillRect(10,10,200,200);
} </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>
4、绘制图案
在多数绘图软件中都有填充图案这个功能,在canvas中,有 createPattern 方法来实现图案效果。
ctx.createPattern(image,type);
其中参数image为要引用的image对象或另一个canvas对象,type是所引用对象的平铺类型,如:repeat、repeat-x, repeat-y,no-repeat必须为下面的字符串值之一。
创建图案的步骤与创建渐变有些类似,需要首先创建出一个pattern,然后再赋予其fillStyle属性或strokeStyle属性。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var img = new Image();
img.src = 'butterf.png';
img.onload = function(){
//创建图案
var prtn = ctx.createPattern(img,'repeat');
ctx.fillStyle = prtn;
ctx.fillRect(0,0,600,600);
}; } </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="500" height="500"></canvas>
</div>
</body>
</html>
5、设置图片的透明度
使用globalAlpha可以设置图形的透明度,改方法适合为大量图形设置相同的透明度。 除此之外,还可以通过设置色彩透明度的参数来为图形设置不同的透明度。
即rgba(r,g,b,a);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width:300px; height: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
}; function draw(){
var c = document.getElementById('myCanvas');
var ctx = c.getContext('2d');
ctx.translate(180,20); for(var i=0; i<50; i++){
ctx.save();
ctx.transform(0.95,0,0,0.95,30,30);
ctx.rotate(Math.PI/12);
ctx.beginPath();
ctx.fillStyle = 'rgba(255,0,0,'+(1-(i+10)/40)+')';
ctx.arc(0,0,50,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
}
}
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="300"></canvas>
</div>
</body>
</html>
6、创建阴影
在canvas中创建阴影效果,需要用到下面这4个属性:shadowOffsetX(阴影的水平偏移)、shadowOffsetY(阴影的垂直偏移)、shadowBlur(阴影羽化的程度)和shadowColor(阴影的颜色),默认为黑色,可以添加透明度。用法如下:
ctx.shadowOffsetX = float;
ctx.shadowOffsetY = float;
ctx.shadowBlur = float;
ctx.shadowColor = color;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width:300px; height: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
}; function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
//设置阴影
ctx.shadowOffsetX = 3; //水平偏移
ctx.shadowOffsetY = 8; //垂直偏移
ctx.shadowBlur = 2; //羽化程度
ctx.shadowColor = 'rgba(255,0,0,0.5)';
//绘制矩形
ctx.fillStyle = '#3cf';
ctx.fillRect(20,20,300,60);
ctx.fill(); //绘制文本
ctx.font = '40px 微软雅黑';
ctx.fillStyle = '#fff';
ctx.fillText('HTML5+CSS3',30,64);
}
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="400" height="300"></canvas>
</div>
</body>
</html>