html5 canvas围绕中心点旋转
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>围绕中心点旋转</title>
<script src="js/modernizr.js"></script>
</head> <body>
<script type="text/javascript">
window.addEventListener('load',eventWindowLoaded,false);
function eventWindowLoaded(){
canvasApp();
}
function canvasSupport(){
return Modernizr.canvas;
}
function canvasApp(){
if(!canvasSupport()){
return;
}else{
var theCanvas = document.getElementById('canvas')
var context = theCanvas.getContext("2d") }
drawScreen();
function drawScreen(){
context.fillStyle="black";
context.fillRect(20,20,25,25); context.setTransform(1,0,0,1,0,0);
var angleInRadians = 45 * Math.PI / 180;
var x = 100;
var y = 100;
var width = 50;
var height = 50;
context.translate(x+.5*width,y+.5*height);
context.rotate(angleInRadians);
context.fillStyle="red";
context.fillRect(-.5*width,-.5*height,width,height); } } </script>
<canvas id="canvas" width="500" height="500">
你的浏览器无法使用canvas
小白童鞋;你的支持是我最大的快乐!!
</canvas>
</body>
</html>
这一次我们设置了变量。。。是不是感觉看起来莫名的亲切了
var x = 100;
var y = 100;
var width = 50;
var height = 50; 然后我们用函数context.translate把画布原点平移到红色正方形的中心点。
这个函数可以将画布原点移到(x,y)处。这里将原点X坐标值设为红色正方形的左上角的X值(100)
加上其一半的宽度。使用前面创建的变量即可控制这个红色正方形的属性 X+0.5*width
然后Y坐标
然后执行平移函数
然后旋转
实现canvas以图片中心旋转
利用canvas的roate和translate方法实现按中心旋转的效果
新建html页

定义画布,以及图案的位置和大小参数
obj.x/y为长方形在canvas中的位置
obj.width/height为长方形的宽高

画一个简单的长方形,让它每100毫秒旋转1度

浏览器中打开页面会发现,旋转是以画布的左上角为圆心的


在旋转之前,把画布的中心位置translate到图片的中心
旋转之后,把中心translate回初始的位置,然后再绘制长方形

完成,浏览器打开页面,可以看到图案以中心旋转的效果


<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0">
<meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<style type="text/css">
canvas{
position: absolute;
border: 1px solid;
}
</style>
</head>
<body>
<canvas id="canvas1" width="800" height="800"></canvas>
<script type="text/javascript">
var ctx1=canvas1.getContext('2d');
var obj={
x:100,
y:200,
width:200,
height:400
};
/**
* 画一个简单的长方形,让它每100毫秒旋转1度
*/
// 浏览器中打开页面会发现,旋转是以画布的左上角为圆心的
function rotate(){
ctx1.clearRect(0,0,800,800);
ctx1.fillStyle='blue';
ctx1.rotate(Math.PI/180);
ctx1.strokeRect(obj.x,obj.y,obj.width,obj.height);
ctx1.fillRect(obj.x,obj.y,obj.width,obj.height);
}
// 在旋转之前,把画布的中心位置translate到图片的中心
function rotate2(){
ctx1.clearRect(0,0,800,800);
ctx1.fillStyle='blue';
ctx1.translate((obj.x+(obj.width/2)),(obj.y+(obj.height/2)));
ctx1.rotate(Math.PI/180);
ctx1.translate(-(obj.x+(obj.width/2)),-(obj.y+(obj.height/2)));
ctx1.strokeRect(obj.x,obj.y,obj.width,obj.height);
ctx1.fillRect(obj.x,obj.y,obj.width,obj.height);
}
// setInterval(rotate,100);
setInterval(rotate2,100);
</script>
</body>
</html>
html5 canvas围绕中心点旋转的更多相关文章
- HTML5 Canvas 小例子 旋转的图片
<一>CSS部分 @charset "utf-8"; *{ padding:; margin:; outline: none; } #canvas{ position: ...
- html5 canvas防微博旋转
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- HTML5 Canvas 小例子 旋转的时钟
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- html5 canvas多个图像旋转
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Html5 Canvas动画旋转的小方块;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- html5 canvas旋转
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HTML5 Canvas 绘制旋转45度佛教万字
效果如下: 代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Cont ...
- 一个坐标点围绕任意中心点旋转--C#实现
假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后的新的坐标设为(x', y'),有公式: x'= (x - rx0)*cos(RotaryAngle) ...
- HTML5 Canvas绘制转盘抽奖
新项目:完整的Canvas转盘抽奖代码 https://github.com/givebest/GB-canvas-turntable 演示 http://blog.givebest.cn/GB-ca ...
随机推荐
- ACM: 强化训练-Inversion Sequence-线段树 or STL·vector
Inversion Sequence Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%lld & %llu D ...
- JS实现屏蔽键盘操作
第一种:当页面初始加载的时候,屏蔽掉当前页面所有的键盘 $(document).ready(function () { document.body.onkeydown = function (even ...
- 【BZOJ2438】 [中山市选2011]杀人游戏 tarjan强连通分量+缩点
Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是 ...
- IEqualityComparer<T>
在linq中使用union和distinct都不起作用,结果发现必须传入一个实现了IEqualityComparer<T>的比较器 public class CompareUser : I ...
- Java_解密ThreadLocal
概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资 ...
- Js中的window.parent ,window.top,window.self 详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- Ajax分页js代码
var pageIndex = 0; var pageSize = 10; $(function () { $("#btnSearch").click(function () { ...
- MVVMLight Messenging
Basically there are two possible ways to send a message, first using an overload of the RaisePropert ...
- DataContractJsonSerializer deserialize stream
var response = await httpClient.PostAsync(endpoint, new FormUrlEncodedContent(parameters)); var resu ...
- 原生javascript封装ajax和jsonp
在我们请求数据时,完成页面跨域,利用原生JS封装的ajax和jsonp: <!DOCTYPE html> <html lang="en"> <head ...