【发布时间】:2018-04-11 03:40:34
【问题描述】:
我想在按键时随机移动一个对象(具体来说是空格键)。但是,我是 JS 的新手。我无法实现完全的随机性。有人可以在这段代码中帮助我实现这一目标吗?而且,当我按下空格键时,图像会变大,但当我使用鼠标时,图像会变小。我希望图像总是很小。
编辑1:为了实现随机性,我使用了一些绝对值。所以有一个随机性起作用的范围。我想消除对绝对值的依赖。
当我使用鼠标向上、向下事件时,图像变小了。
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<style>
body {}
canvas {
border: 1px;
}
</style>
<script>
$(function() {
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0);
};
img.src = "http://www.earthtimes.org/newsimage/eating-apples-extended-lifespan-test-animals-10-per-cent_183.jpg";
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var canvasOffset = $("#canvas").offset();
var offsetX = canvasOffset.left;
var offsetY = canvasOffset.top;
var canvasWidth = canvas.width;
var canvasHeight = canvas.height;
var isDragging = false;
function handleMouseDown(e){
canMouseX=parseInt(e.clientX-offsetX);
canMouseY=parseInt(e.clientY-offsetY);
// set the drag flag
isDragging=true;
}
function handleMouseUp(e){
canMouseX=parseInt(e.clientX-offsetX);
canMouseY=parseInt(e.clientY-offsetY);
// clear the drag flag
isDragging=false;
}
function handleMouseOut(e){
canMouseX=parseInt(e.clientX-offsetX);
canMouseY=parseInt(e.clientY-offsetY);
// user has left the canvas, so clear the drag flag
//isDragging=false;
}
function handleMouseMove(e) {
canMouseX = parseInt(e.clientX - offsetX);
canMouseY = parseInt(e.clientY - offsetY);
// if the drag flag is set, clear the canvas and draw the image
if (isDragging) {
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
ctx.drawImage(img, canMouseX - 128 / 2, canMouseY - 120 / 2, 128, 120);
}
}
function handleKeyPress(e) {
if (e.which == 32) {
canKeybX = Math.random() * 500 * Math.random();
canKeybY = Math.random() * 400 * Math.random();
ctx.clearRect(0, 0, canvasWidth, canvasHeight);
ctx.drawImage(img, canKeybX, canKeybY);
}
}
$("#canvas").mousedown(function(e){handleMouseDown(e);});
$("#canvas").mouseout(function(e){handleMouseOut(e);});
$("#canvas").mouseup(function(e){handleMouseUp(e);});
$("#canvas").mousemove(function(e) {
handleMouseMove(e);
});
$("#canvas").keydown((function(e) {
handleKeyPress(e);
}));
}); // end $(function(){});
</script>
</head>
<body>
<canvas id="canvas" width=1300 height=800 tabindex='1'></canvas>
</body>
</html>
【问题讨论】:
-
我看不到图像变大了?该代码似乎有效。究竟是什么不工作?
-
我更新了您的 jQuery 参考以使用 CDN,并将代码放在 sn-p.xml 中。如您所见,它工作正常。请编辑您的问题,详细说明您认为此代码不能满足您要求的原因。
-
根据我的观察编辑
-
现在我已经添加了鼠标移动的代码。请立即检查,尺寸有变化
标签: javascript jquery html html5-canvas