您的位置:首页 > 其它

Canvas基本匀速运动

2015-12-26 16:54 519 查看
demo1 demo2
每次重新打开页面速度都会有差别

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<style>
*{
margin:0;
padding:0;
}
</style>
</head>
<body>
<canvas id="Mycanvas"></canvas>
</body>
<script>
!(function(doc){
/**执行**/
function runMove(elm){
var cvs=doc.getElementById(elm),
cont=cvs.getContext("2d"),
w=window.innerWidth,
h=window.innerHeight;
cvs.width=w;
cvs.height=h;
/**
* 对象赋予变量
* @type {[type]}
*/
var rectObj=initRect();
var render=function(){
cont.clearRect(0, 0, w, h);
rectObj.render(cont);
}
/**
* X坐标先清除画布再更新
* @return {[type]} [description]
*/
var update=function(){
rectObj.update();
}
var renderAndUpdate=function(){
render();
update();
requestAnimationFrame(renderAndUpdate);
}
renderAndUpdate();
}
/**获取画布里面的对象**/
function initRect(){
var options={
width:200,
height:100,
x:0,
y:0,
bgColor:"#ff00ff",
bw:10,
boClolor:"black",
startme:+new Date()
}
var draw=new drawRect(options);
return draw;
}
/**
* init 初始化坐标和画布数值
* @param  {[type]} rectOption [description]
* @return {[type]}            [description]
*/
function drawRect(rectOption){
this.rectOption=rectOption;
this.x=rectOption.x;
this.y=rectOption.y;
this.w=rectOption.width;
this.h=rectOption.height;
this.bw=rectOption.bw;
this.angle=Math.random()*(Math.PI*2);
this.speedX=randomSpeed(0.05,2);

}
/**渲染
* [prototype description]
* @type {Object}
*/
drawRect.prototype={
render:function(context){
context.beginPath();
context.rect(this.x, this.y, this.w, this.h);
context.fillStyle=this.bgColor;
context.fill();
context.lineWidth=this.bw;
context.strokeStyle=this.boClolor;
context.stroke();
},
update:function(){
this.angle+=this.speedX;
if(this.angle>2*Math.PI){
this.angle-=2*Math.PI
}
console.log(this.x*Math.sin(this.angle));
this.x+=10*Math.sin(this.angle);
}
}
/**
* *获取随机速度值
* @param  {[type]} min [description]
* @param  {[type]} max [description]
* @return {[type]}     [description]
*/
function randomSpeed(min,max){
var random=Math.random()*(max-min)+min;
return random;
}
runMove("Mycanvas");
})(document)
</script>
</html>


Canvas运动的理解就是利用定时器requestAnimationFrame方法1秒60帧左右不停的擦除,重绘,在我们的肉眼里面是看不到它的过程的 1秒连起来 就成了动画,应该说我们再电视上面看到的老期动画片都是这样实现的吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: