标签:
moveTo()
和lineTo()
函数都是用来移动点,绘制路径的函数,绘制完成后,调用closePath()
函数,它会创建一条由描点的终点通向起点的虚拟路径,闭合整个路径,然后调用stroke()
函数进行描边,最后可以用fill()
函数来填充样式。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<!--函数 S-->
<script type="text/javascript">
function canFun(){
var canvas=document.querySelector("canvas");
var context=canvas.getContext("2d");
<!--五角星路径 S-->
context.moveTo(76,197);
context.lineTo(421,197);
context.lineTo(143,399);
context.lineTo(248,71);
context.lineTo(356,399);
context.lineTo(76,197);
<!--五角星路径 E-->
<!--中心区域渐变 S-->
var radGrad=context.createRadialGradient(200,190,2,250,250,1800);
radGrad.addColorStop(0.0,"white");
radGrad.addColorStop(0.05,"yellow");
context.fillStyle=radGrad;
<!--中心区域渐变 E-->
<!--描边和填充 S-->
context.closePath();
context.lineWidth = 8;
context.stroke();
context.fill();
<!--描边和填充 E-->
<!--保持位置居于浏览器中心 S-->
canvas.style.position="absolute";
canvas.style.top=(document.documentElement.clientHeight-500)/2+"px";
canvas.style.left=(document.documentElement.clientWidth-500)/2+"px";
<!--保持位置居于浏览器中心 E-->
}
window.onload=window.onresize=canFun;
</script>
<!--函数 E-->
</head>
<body>
<canvas width="500" height="500" >该浏览器不支持canvas.</canvas>
</body>
</html>
效果如下面的图片:
function draw(id){
var canvas = document.getElementById(id);
var context = canvas.getContext(‘2d‘);
context.fillStyle = "green";
context.fillRect(0,0,150,150);
var r = 40;
context.translate(75,75);
context.beginPath();
context.fillStyle="yellow";
context.moveTo(r,0);
for(var i=0;i<9;i++){
context.rotate(Math.PI/5);
if(i%2 == 0) {
context.lineTo((r/0.525731)*0.200811,0);
} else {
context.lineTo(r,0);
}
}
context.closePath();
context.fill();
context.stroke();
}
<canvas id="canvas" width="150" height="150"></canvas>
画出来的效果如下图:
这个画法不熟悉canvas操作的话,上来看可能会有点懵。(其实我也是看了一会才明白)
下面分解一下这种画法:
这样的:
(1)context.translate(75,75);
将画布起点移动到了上面画的矩形的中心;
(2)context.moveTo(r,0);
设置的是五角星的起点,就是第1个点;
(3)然后进入for循环,绘制剩下的9个点。每次绘制点前,都会调用context.rotate(Math.PI/5);
函数,将画布以上面第一个步骤里移动后的点(就是矩形的中心)为中心,旋转PI/5;
然后就是两种情况了,偶数的时候,移动context.lineTo((r/0.525731)*0.200811,0);
这个距离,例如i=0的时候,就是上面图上的第2个点;
奇数的时候,移动context.lineTo(r,0);
这个距离,例如i=1的时候,就是上图的第3个点,这样画完9个点,加上起点,正好就是一个完整五角星的10个点了,关闭路径,绘制就出现图形了。
标签:
原文地址:http://blog.csdn.net/tangxiaolang101/article/details/51331428