如何移动 JavaScript 中的图像?
How do I move an image in JavaScript?
我正在尝试使用 JS 绘制和移动图像。
此代码一直运行到 moveImage 函数,该函数什么都不做。谁能帮我解决这个问题?
我相信如果我将图像放在 html 中,我可以让图像移动,但如果可能的话,我更愿意让脚本代码放置它。
function init() {
var x = 1, y = 1;
var context = document.getElementById("Vehicle").getContext("2d");
var img = new Image();
img.onload = function () { context.drawImage(img, x, y, 24, 20); }
img.src = "images/Image.png";
//move
function moveImage(imgX, imgY) {
img.style.left = imgX + "px";
img.style.top = imgY + 'px';
}
setInterval(function () {
var FPS = 60;
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
moveImage(x, y);
}, 1000/FPS);
};
我的猜测是 img.style.left/right 不正确或者我没有正确指向 img。
如果没有办法做到这一点,我有没有办法删除(不仅仅是隐藏)图像以便我可以在新位置重新绘制它?
您遇到范围问题。您正在区间内定义 FPS
。这需要在之前完成,以便可以在间隔步骤参数上使用。
var FPS = 60;
var timer = (1000/FPS);
setInterval(function () {
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
moveImage(x, y);
}, timer);
此外,您不能简单地在 canvas 上重新定位图像。它需要重新绘制到 canvas.
调用 context.drawImage()
后,图像将无法再被处理。正如它所暗示的那样,您已将其绘制到 canvas 上。它与 DOM 中的 HTML 元素不同。它现在只是 canvas.
上的彩色像素
查看演示:http://jsfiddle.net/8Ljvnt8j/1/
但是您会注意到图像被重复了。这是因为您在 canvas 之上绘图。 canvas 是 2d,所以您只是 在已经存在的东西上绘画。
因此您需要清除canvas。
img.onload = function () {
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(img, imgX, imgY, 24, 20);
}
查看演示:http://jsfiddle.net/8Ljvnt8j/2/
总而言之:
function init() {
var x = 1;
var y = 1;
var canvas = document.getElementById("Vehicle");
drawImage();
//move
function drawImage() {
var context = document.getElementById("Vehicle").getContext("2d");
var img = new Image();
img.onload = function () {
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(img, x, y, 24, 20);
}
img.src = "https://placeholdit.imgix.net/~text?txtsize=5&txt=20%C3%9720&w=20&h=20";
}
var FPS = 60;
var timer = (1000/FPS);
setInterval(function () {
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
drawImage();
}, timer);
};
init();
我正在尝试使用 JS 绘制和移动图像。
此代码一直运行到 moveImage 函数,该函数什么都不做。谁能帮我解决这个问题?
我相信如果我将图像放在 html 中,我可以让图像移动,但如果可能的话,我更愿意让脚本代码放置它。
function init() {
var x = 1, y = 1;
var context = document.getElementById("Vehicle").getContext("2d");
var img = new Image();
img.onload = function () { context.drawImage(img, x, y, 24, 20); }
img.src = "images/Image.png";
//move
function moveImage(imgX, imgY) {
img.style.left = imgX + "px";
img.style.top = imgY + 'px';
}
setInterval(function () {
var FPS = 60;
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
moveImage(x, y);
}, 1000/FPS);
};
我的猜测是 img.style.left/right 不正确或者我没有正确指向 img。
如果没有办法做到这一点,我有没有办法删除(不仅仅是隐藏)图像以便我可以在新位置重新绘制它?
您遇到范围问题。您正在区间内定义 FPS
。这需要在之前完成,以便可以在间隔步骤参数上使用。
var FPS = 60;
var timer = (1000/FPS);
setInterval(function () {
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
moveImage(x, y);
}, timer);
此外,您不能简单地在 canvas 上重新定位图像。它需要重新绘制到 canvas.
调用 context.drawImage()
后,图像将无法再被处理。正如它所暗示的那样,您已将其绘制到 canvas 上。它与 DOM 中的 HTML 元素不同。它现在只是 canvas.
查看演示:http://jsfiddle.net/8Ljvnt8j/1/
但是您会注意到图像被重复了。这是因为您在 canvas 之上绘图。 canvas 是 2d,所以您只是 在已经存在的东西上绘画。
因此您需要清除canvas。
img.onload = function () {
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(img, imgX, imgY, 24, 20);
}
查看演示:http://jsfiddle.net/8Ljvnt8j/2/
总而言之:
function init() {
var x = 1;
var y = 1;
var canvas = document.getElementById("Vehicle");
drawImage();
//move
function drawImage() {
var context = document.getElementById("Vehicle").getContext("2d");
var img = new Image();
img.onload = function () {
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(img, x, y, 24, 20);
}
img.src = "https://placeholdit.imgix.net/~text?txtsize=5&txt=20%C3%9720&w=20&h=20";
}
var FPS = 60;
var timer = (1000/FPS);
setInterval(function () {
x++;
y++;
if (x > 1000) { x = 1; }
if (y > 1000) { y = 1; }
drawImage();
}, timer);
};
init();