我正在尝试使用非常简单的动画来处理加载到Javascript Canvas上的图像向右滑动的位置。下面的代码适用于绘制的矩形,但是当我尝试插入图像时,没有任何加载,但我没有收到任何错误消息。我需要让它只使用Javascript。
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
var canvas = document.getElementById("canvas"),
cx = canvas.getContext("2d");
function Card(x,y){
this.x = x || 0;
this.y = y || 0;
this.draw = function(){
var img = new Image();
img.onload = function()
{
cx.drawImage(img, x, y);
}
img.src = "images/back.jpg";
}
}
var myCard = new Card(50,50);
function loop(){
cx.clearRect(0, 0, canvas.width, canvas.height);
myCard.x++;
myCard.draw();
requestAnimFrame(loop);
}
loop();
答案 0 :(得分:1)
问题是你的[x,y]值在绘制函数中是未定义的。
演示:http://jsfiddle.net/m1erickson/qAm39/
这是对代码的重构,以保持适当的范围:
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
#canvas{border:1px solid red;}
</style>
<script>
$(function(){
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
var canvas = document.getElementById("canvas"),
cx = canvas.getContext("2d");
function Card(x,y){
this.x = x || 0;
this.y = y || 0;
this.img=new Image();
this.init=function(){
// "var self=this" makes myCard available in the img.onload function
// otherwise "this" inside img.onload refers to the img
var self=this;
this.img.onload = function()
{
self.draw();
loop();
}
this.img.src = "https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house16x16.png";
}
// x,y need to be this.x and this.y
this.draw = function(){
cx.drawImage(this.img, this.x, this.y);
}
}
var myCard = new Card(50,50);
myCard.init();
function loop(){
if(myCard.x<canvas.width-20){
requestAnimFrame(loop);
}
cx.clearRect(0, 0, canvas.width, canvas.height);
myCard.x++;
myCard.draw();
}
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>