我创建了一个地图,用户可以从一个建筑物走到另一个建筑物。在地图旁边有一个小的小地图。使用load()命令刷新“大”映射。我有以下代码:
$(document).keydown(function(event) {
switch (event.keyCode) {
// A
case 65: $("#world").load("../modules/Map.php?go&move=w"); break;
// W
case 87: $("#world").load("../modules/Map.php?go&move=n"); break;
// D
case 68: $("#world").load("../modules/Map.php?go&move=e"); break;
// S
case 83: $("#world").load("../modules/Map.php?go&move=s"); break;
}
});
现在,在按下其中一个键之后,我想要执行以下操作:
$("#minimap").load("../modules/Minimap.php");
我希望你能帮助我。
答案 0 :(得分:5)
你有两个选择,但首先,让我们稍微重构一下(我稍后会重构一下,但让我们从这开始):
$(document).keydown(function(event) {
var direction;
switch (event.keyCode) {
// A
case 65: direction = 'w'; break;
// W
case 87: direction = 'n'; break;
// D
case 68: direction = 'e'; break;
// S
case 83: direction = 's'; break;
}
if (direction) {
$("#world").load("../modules/Map.php?go&move=" + direction);
}
});
现在第一次加载是集中的,我们不会重复自己。
好的,你有两个选择:
如果您希望两个switch
同时发生,请将其放在load
语句之后。例如,最后回升:
if (direction) {
$("#world").load("../modules/Map.php?go&move=" + direction);
$("#minimap").load("../modules/Minimap.php");
}
我假设我们只想在密钥匹配时才这样做。如果我错了,请将其移出if
。
如果您希望第二次加载等到第一次加载完成,请使用第一个success
上的load
回调。
if (direction) {
$("#world").load("../modules/Map.php?go&move=" + direction, function() {
// This gets called when the load completes
$("#minimap").load("../modules/Minimap.php");
});
}
更多the docs。
以下是更彻底的重构版本:请:
var directionKeyMap = {
'65': 'w', // A
'87': 'n', // W
'68': 'e', // D
'83': 's' // S
};
然后这个(上面的选项1):
$(document).keydown(function(event) {
var direction;
direction = directionKeyMap[event.keyCode];
if (direction) {
$("#world").load("../modules/Map.php?go&move=" + direction);
$("#minimap").load("../modules/Minimap.php");
}
});
或者这个(上面的选项2):
$(document).keydown(function(event) {
var direction;
direction = directionKeyMap[event.keyCode];
if (direction) {
$("#world").load("../modules/Map.php?go&move=" + direction, function() {
$("#minimap").load("../modules/Minimap.php");
});
}
});
那些使用对象将键码映射到方向,利用您可以使用括号表示法查找对象属性的事实。
(不要担心keyCode
是一个数字,但我们地图中的键是字符串;每当你使用括号表示法时,你提供的任何内容都会被JavaScript解释器转换为字符串。事实上,这就是即使你索引到一个数组,因为JavaScript数组aren't really arrays。但同样,我们使用的是普通对象,而不是数组。)