canvas教程

第五章 《Canvas的简单变化》

字号+ 作者:H5之家 来源:H5之家 2017-10-17 12:00 我要评论( )

昨天因小区停电,没有更新,很抱歉。今天先讲一下Canas当中的简单变化。主要有旋转,移动,缩放等变化。 旋转变化 想要实现旋转变化,我们要遵循以下的步骤 我

HTML5 Canvas学习---第五章 《Canvas的简单变化》

作者: 卡马克

发布时间:2015-06-16 10:32:58

  昨天因小区停电,没有更新,很抱歉。今天先讲一下Canas当中的简单变化。主要有旋转,移动,缩放等变化。

旋转变化

  想要实现旋转变化,我们要遵循以下的步骤

先上效果图

<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>chp2_draw_canvas</title> <script> /** * @author Rafael */ window.addEventListener("load", eventWindowLoaded, false); function eventWindowLoaded() { canvasApp(); var a = document.getElementById("body"); a.onmousedown = function a(e) { var distance = Math.sqrt(e.clientX*e.clientX+e.clientY*e.clientY); alert(e.clientX+" : "+e.clientY+" : "+distance); } } function canvasApp() { var theCanvas = document.getElementById("canvas"); var context = theCanvas.getContext("2d"); function drawScreen() { context.fillStyle = "black"; context.fillRect(0, 0, 25, 25); context.fillStyle = "blue"; context.fillRect(100, 100, 50, 50); context.setTransform(1, 0, 0, 1, 0, 0); var angleInradians = 45 * Math.PI / 180; context.rotate(angleInradians); context.fillStyle = "red"; context.fillRect(100, 100, 50, 50); } drawScreen(); } </script> </head> <body> <canvas > 你的浏览器不支持HTML5画布 </canvas> </body> </html>

  蓝色的正方形为原始位置,我们使用了旋转函数对图像进行了45度的旋转。

但我们获得的结果跟预期不相符,那是因为canvas的原始变化点是以(0, 0)为开始的,也就是说图像绕着这个点饶了45度。

最终的图形为下方的红色。

  如果我们希望图像沿着自身的中心为轴,进行旋转的话,我们需要把旋转点从(0, 0)移动到,我们要画的图形的中心点上。

移动变化

<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>chp2_draw_canvas</title> <script type="text/javascript"> //获取Canvas对象 window.onload = function() { var canvas = document.getElementById("canvas"); var context = canvas.getContext("2d"); //矩形大小 var width = 100; var height = 100; //旋转频率 var angelSpeed = 5; //中心点位值 var centerX = canvas.width / 2; var centerY = canvas.height / 2; //绘制钜形 //将坐标中心作为起启点 context.translate(canvas.width / 2, canvas.height / 2); drawScreen(0); //添加键盘处理事件 window.addEventListener("keydown", onKeyDown, false); function onKeyDown(evt) { if (evt.keyCode == "39") { drawScreen(angelSpeed); } else if (evt.keyCode == '37') { drawScreen(-angelSpeed); } } function drawScreen(speed) { context.clearRect(-2 * width, -2 * height, 4 * width, 4 * height); context.beginPath(); context.fillStyle = '#ff0000'; //旋转 context.rotate(speed * Math.PI / 180); context.fillRect(-width / 2, -height / 2, width, height); context.fill(); context.closePath(); } } </script> </head> <body> <canvas > 你的浏览器不支持HTML5画布 </canvas> </body> </html>

通过该代码,用户可以使用键盘的左右键,旋转图像。

实现旋转的逻辑

缩放变化

  理解了前面两个变化,缩放就理解起来很容易了。context.scale(valuex, valuey);有两个参数,分别为x边的放大倍数和y边的放大倍数。原始的为(1, 1),也就是说(2, 2)意味着长宽成了2倍。在这里上面的移动周新坐标点也适用,如果不移动轴心坐标点它会以(0, 0)为中心进行变化运算。

  这里不再细讲了,直接上例子

chp2_draw_canvas

 

 

 

 

 

 

 

来源:

推荐:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
n