码迷,mamicode.com
首页 > 其他好文 > 详细

Canvas——路径使用的一些感悟

时间:2016-05-07 10:28:17      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:

路径使用的一些总结:

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个点了,关闭路径,绘制就出现图形了。


技术分享

Canvas——路径使用的一些感悟

标签:

原文地址:http://blog.csdn.net/tangxiaolang101/article/details/51331428

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!