如何移动一个矩形与箭头键,同时清除画布之间的每次重新绘制
How move a rectangle with arrow keys while clearing the canvas in between every re-draw
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
canvas {
border: 1px solid black;
width: 1200px;
height: 600px;
}
</style>
</head>
<body>
<script>
var z = document.createElement("CANVAS");
var ctx = z.getContext("2d");
var x = 20;
var y = 20;
ctx.fillRect(x, y, 5, 5);
ctx.stroke();
document.body.appendChild(z);
document.onkeydown = checkKey;
function checkKey(e) {
e = e || window.event;
if (e.keyCode == '38') {
y--;
ctx.fillRect(x, y, 5, 5);
}
else if (e.keyCode == '40') {
// down arrow
ctx.fillRect(x, y, 5, 5);
}
else if (e.keyCode == '37') {
// left arrow
x--;
ctx.fillRect(x, y, 5, 5);
}
else if (e.keyCode == '39') {
// right arrow
x++;
ctx.fillRect(x, y, 5, 5);
}
}
</script>
</body>
</html>
每次我尝试用:ctx清除画布。clearRect(0,0,1200,600);或ctx.clearCanvas ();什么也不会发生。矩形甚至不动。我把它放在x++之间;以及ctx.fillRect();谢谢。
更正后的代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
canvas {
border: 1px solid black;
width: 1200px;
height: 600px;
}
</style>
</head>
<body>
<script>
var z = document.createElement("CANVAS");
var ctx = z.getContext("2d");
var x = 20;
var y = 20;
ctx.fillRect(x, y, 5, 5);
ctx.stroke();
document.body.appendChild(z);
document.onkeydown = checkKey;
function clear() {
ctx.clearRect(0, 0, z.width, z.height);
}
function checkKey(e) {
e.preventDefault();
e = e || window.event;
if (e.keyCode == '38') {
y--; clear();
ctx.fillRect(x, y, 5, 5);
}
if (e.keyCode == '40') {
// down arrow
y++;clear();
ctx.fillRect(x, y, 5, 5);
}
if (e.keyCode == '37') {
// left arrow
clear();
x--;
ctx.fillRect(x, y, 5, 5);
}
if (e.keyCode == '39') {
// right arrow
clear();
x++;
ctx.fillRect(x, y, 5, 5);
}
}
</script>
</body>
</html>
</body>
</html>
要清除整个画布,你需要这样做:
ctx.clearRect(0, 0, z.width, z.height);
把它放在x++
和ctx.fillRect()
之间。
我还在你的代码中看到另一个错误:
当你处理向下箭头键事件时,你不使用
y++
,所以矩形不会向下移动。我帮你改正了。
错误2:你没有使用e.preventDefault
,所以每次我移动矩形时,窗口也滚动(如果它太小)。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- DataTables在表之间移动行