效果图和前一篇一样,只是用的方法不一样。前一篇用代码直接设置偏移量和旋转角度,这一片使用canvas的函数进行绘制。废话不多说,直接上代码:
window.onload=function(){ var myCanvas = document.getElementById("myCanvas"); if(myCanvas.getContext("2d")){ myCanvas.width = document.documentElement.clientWidth-20;; myCanvas.height = document.documentElement.clientHeight-20;; var context =myCanvas.getContext("2d"); //绘制更多的星星 var colors=["#33B5E5","#0099CC","#AA66CC","#9933CC","#99CC00","#669900","#FFBB33","#FF8800","#FF4444","#CC0000"];//绘制各种颜色的星星 //colors="#fd5";//绘制一种颜色的星星 drawMoreStars(context,200,10,colors); }else{ return false; } } /** *该方法用来绘制各种颜色的星星 *@param cxt:canvas的上下文环境 *@param num:绘制的星星的数量 *@param radius:星星半径,以后随机生成半径会在radius与2*radius之间 *@param colors:颜色,可能是数组,也可能只是一个颜色 **/ function drawMoreStars(cxt,num,radius,colors){ //绘制一个背景色 cxt.fillStyle="black"; cxt.fillRect(0,0,myCanvas.width,myCanvas.height);//绘制一个与当前画布一样大的矩形,背景色为fillStyle设置的颜色 //绘制一片星空 var color="white";//默认为白色的星星 for(var i=0;i<num;i++){ var R1 = Math.random()*radius+radius;//大圆直径20-40之间 var x = Math.random()*myCanvas.width;//x轴的偏移量 //左侧不出界 if(x<R1)x=R1; //右侧不出界 if(x>=myCanvas.width-R1){x=myCanvas.width-R1;} var y = Math.random()*myCanvas.height;//y轴的偏移量 //上面不出界 if(y<R1) y=R1; //下面不出界 if(y>=myCanvas.height-R1){y=myCanvas.height-R1;} if(isArray(colors)){//给定的是数组,那么从数组中随机获取一个颜色 color=colors[Math.floor(Math.random()*colors.length)];//星星的颜色 }else{//只是一个颜色,直接设置就好 color=colors; } //alert(x+"\t"+myCanvas.width+"\t"+R1+"\n"+y+"\t"+myCanvas.height); var rot = Math.random()*360;//旋转角度在0-360度之间 drawStar(cxt,R1,x,y,color,rot); } } /** *该方法用来绘制五角星(五角星的绘制可以理解成在两个大圆中绘图) *@param cxt:canvas的上下文环境 *@param R:大圆的半径,用来绘制向外的五个点(小圆半径默认为大圆的一半) *@param x:在x方向的偏移量,若是不设置,默认为0,做左上角进行绘制 *@param y:在y方向的偏移量,若是不设置,默认为0,做左上角进行绘制 *@param fillColor:五角星的填充色 *@param rot:旋转角度 */ function drawStar(cxt,R,x,y,fillColor,rot){ //保存context的状态 cxt.save(); cxt.translate(x,y);//设置偏移量 cxt.rotate(rot/180*Math.PI);//设置旋转弧度 //将每个星星的宽度和高度都缩放R倍 cxt.scale(R,R);//使用缩放让每个星星的大小不一样(因为scale会使lineWidth随着缩放,所以此处不再设置边框的一些属性) drawStarPath(cxt);//绘制一个大小相同的五角星 cxt.fillStyle=fillColor;//填充色 cxt.lineJoin="round";//边角 //先填充,后描边 cxt.fill(); cxt.restore();//恢复保存之前的状态 } /** *该方法用来绘制一个没有偏移量的五角星的各条边 *@param cxt:canvas的上下文环境 */ function drawStarPath(cxt){ //绘制五角星 cxt.beginPath(); for(var i=0;i<5;i++){ //绘制大圆中的五个角 //第一个角为18度,以后大圆的每个角都是(18+72的倍数)度 //(18+i*72)/180*Math.PI:将角度转换成弧度 //因为绘制五角星的坐标系y轴与普通的坐标系相反,x轴以上为负数,x轴以下为正数,所以此处y轴的坐标为负数 cxt.lineTo(Math.cos((18+i*72)/180*Math.PI),-Math.sin((18+i*72)/180*Math.PI)); //绘制小圆中的五个角 //与大圆的各个角一致,第一个角为54度,以后每个角都是(54+72的倍数)度 //每个星星的小圆半径默认为大圆半径的一半 cxt.lineTo(Math.cos((54+i*72)/180*Math.PI)*0.5,-Math.sin((54+i*72)/180*Math.PI)*0.5); } cxt.closePath(); } //该方法用来判断是否为数组 var isArray = function(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; };
看代码可以知道,这个是用了canvas的translate(x,y)函数让原本中规中矩的图像产生偏移,使用rotate函数让图像旋转一定弧度,再使用scale对图像进行一定的缩放。此代码有以下几个注意点:
1、星星的大圆半径是参数传递过来的,小圆半径却是在drawStarPath方法中写死的,它永远是大圆半径的一半。若是不设置这个一半的关系,最后得到的图形不是五角星,而是标准的等边十边形。
2、scale进行缩放的时候有个副作用,就是边框线会随之缩放,所以此处没有设置边框线的样式,同时也没有使用stroke方法,若是调用了五角星会缺角,有兴趣的可以试试。
3、scale的两个参数是分别用来设置缩放的宽度和高度的,这里设置的是一样的以保证五角星不变形。大家可以试着调整一下来加深一下对“图形变换”的理解。
相关推荐
基瑞编著的《HTML5Canvas核心技术:图形动画与游戏开发》是HTML5 Canvas领域的标杆之作,也是迄今为止该领域内容最为全面和深入的著作之一,是公认的权威经典、Amazon五星级超级畅销书、资深技术专家David Geary*...
HTML5 Canvas是Web开发中的一个关键技术,它提供了一个在网页上绘制图形的API,使得开发者可以直接在浏览器中创建丰富的交互式2D图形、动画以及...这些代码覆盖了上述所有知识点,是学习和探索Canvas技术的理想资源。
Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、入门学习Canvas技术代码。 HTML5 Canvas核心技术源码技术代码、图形、动画与游戏开发。 Canvas开发、...
HTML5 Canvas核心技术:图形、动画与游戏开发 HTML5 Canvas核心技术:图形、动画与游戏开发
在canvas学习中,图形透明及交叠效果是两个重要的概念,它们可以让我们创建出丰富的视觉效果和动态交互。本文将详细解析这两个知识点,并通过提供的标签和文件名来具体阐述。 首先,我们来看“图形透明”这个概念。...
首先,Canvas是一个基于矢量图形的二维画布,通过JavaScript进行编程操作。开发者可以使用它来绘制线条、形状、图像,并进行颜色填充和透明度控制。Canvas API提供了丰富的绘图方法,如`fillRect()`用于填充矩形,`...
HTML5 Canvas核心技术 图形、动画与游戏开发
SVG和Canvas绘图:使用Canvas绘制基本图形.docx
可以使用`PictureBox`或`Canvas`等控件来绘制图形,通过鼠标拖动或输入框输入来控制变换参数。 为了进一步完善功能,我们可能需要实现以下特性: 1. 可视化反馈:实时显示变换效果,使用户能直观地看到图形的变化。...
html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的星星特效html5 canvas飘洒的...
5. **图形变换**:`translate()`, `rotate()` 和 `scale()` 方法可用于对图形进行平移、旋转和缩放操作。 在动画部分,书籍可能讲解了: 1. **帧动画原理**:通过不断清除Canvas并重新绘制下一帧,实现连续的视觉...
HTML5 Canvas核心技术:图形、动画与游戏开发 - (美)基瑞(Geary,D.)著
高清版 HTML5 CANVAS核心技术图形动画与游戏开发(爱飞翔).pdf
2.14_深入理解canvas图形变换|星空和图形变换|Canvas图形、动画、游戏开发从入门到精通全系列课程
2. **变换操作**:Canvas API提供了`translate()`、`rotate()`、`scale()`等方法来改变图形的位置、角度和大小,这些变换可以用来实现动画效果。 3. **动画原理**:理解如何通过JavaScript的定时器(如`...
- **1.2.1 2D绘图环境**:这是`canvas`中最常用的一种绘图环境,提供了一系列方法用于绘制基本图形,如线条、矩形等。 - **1.2.2 canvas状态的保存与恢复**:为了便于多次修改绘图环境而不丢失原始状态,可以使用`...
在这个"HTML5 Canvas核心技术图形、动画与游戏开发"的PDF扫描版中,读者可以深入学习到Canvas的核心概念和实践技巧。 首先,Canvas的基本使用方法是通过JavaScript API来实现的。这个API提供了大量的绘图命令,如`...
### JS:canvas的JavaScript图形编程深入解析 #### 引言 Canvas API是HTML5中引入的一项强大特性,允许网页开发者直接在网页上绘制图形、图像,实现动态视觉效果。然而,早期版本的Internet Explorer(IE)并不...
HTML5的canvas元素是网页动态图形绘制的重要工具,它允许开发者在网页上直接进行2D图形的编程。在这个“HTML5 canvas元素背景梦幻小星星闪烁特效”中,开发者利用canvas的强大功能,创建了一种视觉效果,使网页背景...
2.11_canvas画一片星空|星空和图形变换|Canvas图形、动画、游戏开发从入门到精通全系列课程