canvas中的rotate的使用方法
今天在绘制一个足球滚动的时候,想使用rotate方法,之前看到这个方法的时候,并没有引起任何重视,无非就是和CSS3里的rotate一样的用么...
遗憾的是,事实并非如此,由于代码在公司,我也就不去找那些图片资源了,直接用一个黑色方块代替
代码如下:
var oCan = document.getElementById("canvas");
var ctx = oCan.getContext("2d");
ctx.rotate(30 * Math.PI / 180);
ctx.fillRect(50,50,100,100);
显示结果如下:

这...不能忍....于是乎打开了我心爱的w3school,发现一句有用的也没多说(心寒)
下班后一路琢磨这个问题,终于想到,translate似乎可以改变坐标系的0,0点.
恩,这应该有用,但是...试了几次,都失败了,百度搜了几篇文章,真的好废柴,都是错误的,继续搜,看到了一个老外写的(还得是老外)
var x = 10;
var y = 10;
var width = 100;
var height = 100
var cx = x + 0.5 * width; // x of shape center
var cy = y + 0.5 * height; // y of shape center context.fillStyle = "#ff0000";
context.fillRect(x, y, width, height); //draw normal shape context.translate(cx, cy); //translate to center of shape
context.rotate( (Math.PI / 180) * 25); //rotate 25 degrees.
context.translate(-cx, -cy); //translate center back to 0,0 context.fillStyle = "#0000ff";
context.fillRect(x, y, width, height);
链接:http://tutorials.jenkov.com/html5-canvas/transformation.html#rotation
这次,恍然大悟,正解!封装下吧,以后就用它了
function fillRotateRect(context,x,y,width,height,degrees){
var cx = x + 0.5 * width;
var cy = y + 0.5 * height;
context.translate(cx, cy);
context.rotate( (Math.PI / 180) * degrees);
context.translate(-cx, -cy);
context.fillRect(x,y,width,height);
}
但这个方法只能绘制正方形,遇到图片,或者圆形,就又得改动,有时间了再思考怎么封装一个比较妥善的吧.先到这里了
canvas中的rotate的使用方法的更多相关文章
- 第162天:canvas中Konva库的使用方法
本篇接着上一篇:第157天:canvas基础知识详解 继续来写. 五.Konva的使用快速上手 5.1 Konva的整体理念 Stage | +------+------+ | ...
- android canvas中rotate()和translate()两个方法详解
rotate()和translate() 1.看到这个题目的时候,有人会觉得这不就是一个对画布的旋转和平移的嘛,但是其中的细节的地方还是需要深究一下的. 例如:有个需求将TextView的文字竖直显示 ...
- 讲解Canvas中的一些重要方法
Canvas所提供的各种方法根据功能来看大致可以分为几类: 第一是以drawXXX为主的绘制方法: 第二是以clipXXX为主的裁剪方法: 第三是以scale.skew.translate和rotat ...
- Canvas中的save方法和restore方法
初学者也许会误认为canvas中save方法是用来保存绘图状态的图形,而restore方法是用来还原之前保存的绘图状态的图形,其实不然. save():保存当前的绘图状态. restore():恢复之 ...
- <canvas>中isPointInPath()方法在不同绘制内容中的效果
<canvas>是HTML5中新增加的一个元素,我们可以使用脚本(通常使用JavaScript)在上面绘制图形,就像个画布一样.我们可以用它来绘制图表.制作一些动画.默认大小为300px ...
- Canvas中的剪切clip()方法
Canvas中的剪切 接下来我们要聊的不是图像的合成,而是Canvas中的另一个有用的功能:剪切区域.它是Canvas之中由路径所定义的一块区域,浏览器会将所有的绘图操作都限制在本区域内执行.在默认情 ...
- H5 Canvas | 画布中变量作用域与setInterval方法同步执行探究
Demo - 随机绘制圆环 实现思路: 将一个圆环的绘制分成100份,setInterval()方法定义每隔时间n绘制一段新的,每份的开始路径都是上一次的结束路径,实现步进绘制. 通过Math.ran ...
- [BOT] 一种android中实现“圆角矩形”的方法
内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...
- 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性
1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...
随机推荐
- C#高级编程笔记 Day 4, 2016年9月 12日(接口)
1.定义和实现接口:接口名称通常上以字母 I 开头 例子:定义IBankAccount接口 namespace Test.YinXi{ public interface IBankAccount{ v ...
- 【Python】自动生成html文件查看指定目录中的所有图片
获取本目录下的pic子目录中的所有图片(jpg,png,bmp,gif等,此处以jpg文件为例),然后生成一个image.html文件,打开该html文件即可在浏览器中查看pic子目录中的所有图片. ...
- AngularJS--自定义指令和模板
一.自定义指令: 1. 先创建模块 var app=angular.module("myApp",[]); 2. 创建自定义指令 (directive后面的参数一:自定义指令 ...
- JS Date
JS获取当前日期时间 var myDate = new Date();myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth() ...
- AngularJS SQL 获取数据
使用PHP从MySQL中获取数据: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 关于Qt creator 无法使用fcitx输入中文的问题折腾
环境: 系统ubuntu16.04amd64,qt5.4.2 安装完qt5.4后,在编写代码时,发现无法输入中文,离开qt creator 就立刻正常.原因似乎是qt对fcitx支持. 解决方法我是参 ...
- 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】
一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...
- Knockout.js随手记(1)
新的开始,knockout.js 1.首先去http://knockoutjs.com/index.html下载knockout.js,最新的版本是2.3 2.知道什么是Knockout?它是个Jav ...
- Leetcode: Surrounded regions
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- ajax传递array参数
var ticketId = new Array(); for(var i = 0; i < checkboxes.length; i++) { ticketId.push(checkboxes ...