我有一些javascript / jQuery代码用于进行图像转换。 $(obj)是一个包含两个图像的框,它是每个图像的大小。以下代码片段用于选择$(obj)边框之外的新位置,这与之前使用的位置不同(因为一个图像向右滑动而新图像从左侧看起来比向右滑动更好,而另一个来自右边。)
var newLoc = Math.floor((Math.random() * 4));
if ($(obj).data('lastloc') == newLoc) {
console.log("FIXED "+newLoc);
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
if (newLoc == 0) newLoc = 1;
if (newLoc == 1) newLoc = 0;
console.log("WITH "+newLoc);
}
我遇到的问题是Chrome和Firefox都在JavaScript控制台中输出:
FIXED 3
WITH 3
这怎么可能?
答案 0 :(得分:10)
您需要else if
。它刚刚落到这里
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
试试这个
if (newLoc == 3) newLoc = 2;
else if (newLoc == 2) newLoc = 3;
else if (newLoc == 0) newLoc = 1;
else if (newLoc == 1) newLoc = 0;
或使用正确的switch
答案 1 :(得分:4)
您将使用else
以便只处理其中一个条件:
if (newLoc == 3) newLoc = 2;
else if (newLoc == 2) newLoc = 3;
else if (newLoc == 0) newLoc = 1;
else if (newLoc == 1) newLoc = 0;
您也可以使用开关:
switch (newLoc) {
case 3: newLoc = 2; break;
case 2: newLoc = 3; break;
case 0: newLoc = 1; break;
case 1: newLoc = 0; break;
}
或条件运算符:
newLoc =
newLoc == 3 ? 2 :
newLoc == 2 ? 3 :
newLoc == 0 ? 1 :
newLoc == 1 ? 0 :
newLoc;
如果这四个值是变量可以拥有的唯一值,您甚至可以计算新值。只需翻转零位就可以获得新值:
newLoc ^= 1;
答案 2 :(得分:3)
为了将newLoc变量正确映射到不同的数字,您可以使用一个涉及进行此更改的对象。
更改
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
if (newLoc == 0) newLoc = 1;
if (newLoc == 1) newLoc = 0;
到
var newLoc = Math.floor((Math.random() * 4));
var loc = { 3: 2, 2: 3, 0: 1, 1: 0 };
if ($(obj).data('lastloc') == newLoc) {
console.log("FIXED "+newLoc);
newLoc = loc[newLoc] || newLoc;
console.log("WITH "+newLoc);
}
答案 3 :(得分:1)
因为你的逻辑搞砸了:
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
如果它是3然后它变为2然后它又回到3。
你必须在第一个if之后将它们更改为else if
语句