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

canvas动画

时间:2014-08-24 23:29:43      阅读:1567      评论:0      收藏:0      [点我收藏+]

标签:style   os   使用   io   ar   cti   代码   html   时间   

在canvas中做动画是根据时间变化重新将canvas内容重新绘制,这样看起来就感觉是一个连贯的动画了。也就是一帧一帧的概念。每一帧的内容都是不一样的。

下面做一个齿轮从左到右滚动的动画。每隔一段时间重新绘制图片,然后移动图片的x轴,将图片旋转。这样就可以看出是滚动的。主要用到canvas的一个绘制图片的函数:

drawImage(img,x,y,width,height),canvas坐标改变函数translate(x,y),canvas旋转函数,rotate(deg).代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#canvas{
border:1px solid #03F;
}
</style>
</head>
<body>
<canvas id="canvas" width="800" height="300"></canvas>
<script>
var canvas,
context,
geer=new Image(),
xpos,
stepCounter,
stepDegrees,
stepDistance,
stepSpeed,
stepsFullRevolition;
function init(){
canvas=document.getElementById(‘canvas‘);
context=canvas.getContext(‘2d‘);
stepCounter=0;
stepDegrees=2;
stepDistance=2;
stepSpeed=5;
stepsFullRevolition=parseInt(360/stepDegrees);
geer.addEventListener(‘load‘,initGeer,false);
geer.src=‘images/cl.jpg‘;
}
function initGeer(){
xpos=-(geer.width/2);
moveGeer();
}
function moveGeer(){
context.clearRect(0,0,canvas.width,canvas.height);
context.save();
xpos+=stepDistance;
context.translate(xpos,canvas.height-(geer.width/2));
context.rotate(Math.PI*stepDegrees*stepCounter/180);
context.drawImage(geer,-(geer.width/2),-(geer.height/2),geer.width,geer.height);
context.restore();

if((xpos-(geer.width/2))<canvas.width){
stepCounter++;
if(stepCounter>=(stepsFullRevolition-1)){
stepCounter=0;
}
setTimeout(moveGeer,stepSpeed);
}

}
window.addEventListener(‘load‘,init,false);


</script>
</body>
</html>

每一帧开始时,首先清楚canvas内容clearRect(x,y,width,height),然后保存当前绘制环境,改变横坐标位置,将坐标原点放置新的位置。使用计时器setTimeout绘制齿轮内容,这样便有了动画滚动的效果。

canvas动画

标签:style   os   使用   io   ar   cti   代码   html   时间   

原文地址:http://www.cnblogs.com/gb2013-shangduoduo/p/3933716.html

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