Mam jakiś kod JavaScript / JQuery używany do tworzenia przejść obrazów. $ (obj) to pudełko zawierające dwa obrazy, które jest wielkością każdego obrazu. Poniższy fragment kodu służy do wyboru nowej lokalizacji poza granicami $ (OBJ), co różni się od poprzedniej stosowanej lokalizacji (ponieważ jeden obraz przesuwny w prawo, a nowy pochodzi z lewego wygląda znacznie lepiej niż jeden przesuwany w prawo, podczas gdy inny pochodzi z prawej strony.)
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);
}
Problem, który mam, jest to, że zarówno Chrome, jak i Firefox wysyłają to w konsoli JavaScript:
FIXED 3
WITH 3
Jak to jest możliwe?
4 odpowiedzi
Aby prawidłowo mapować zmienną NewLoc na inny numer, możesz użyć obiektu, który obejmowałby tę zmianę.
Zmiana
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
if (newLoc == 0) newLoc = 1;
if (newLoc == 1) newLoc = 0;
Do
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);
}
Potrzebujesz else if
. Po prostu się tu spada
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
Spróbuj tego zamiast tego
if (newLoc == 3) newLoc = 2;
else if (newLoc == 2) newLoc = 3;
else if (newLoc == 0) newLoc = 1;
else if (newLoc == 1) newLoc = 0;
Lub użyj właściwego switch
Używałbyś else
, aby obsługiwać tylko jeden z warunków:
if (newLoc == 3) newLoc = 2;
else if (newLoc == 2) newLoc = 3;
else if (newLoc == 0) newLoc = 1;
else if (newLoc == 1) newLoc = 0;
Możesz także użyć przełącznika:
switch (newLoc) {
case 3: newLoc = 2; break;
case 2: newLoc = 3; break;
case 0: newLoc = 1; break;
case 1: newLoc = 0; break;
}
Lub warunkowych operatorów:
newLoc =
newLoc == 3 ? 2 :
newLoc == 2 ? 3 :
newLoc == 0 ? 1 :
newLoc == 1 ? 0 :
newLoc;
Jeśli te cztery wartości są jedynymi wartościami, które mogą mieć zmienną, możesz nawet obliczyć nową wartość. Po prostu przerzucanie bitów zero da Ci nową wartość:
newLoc ^= 1;
Ponieważ twoja logika jest pomieszana:
if (newLoc == 3) newLoc = 2;
if (newLoc == 2) newLoc = 3;
Jeśli jest 3, to idzie do 2, to jest z powrotem do 3.
Musisz je zmienić na else if
instrukcje po pierwszym, jeśli