Вы можете сохранить цвета в массиве, тогда при манипуляциях всегда используйте первый цвет в массиве в качестве текущего цвета:
var bodyColors = ['blue','red','green'];
function switchBodyColor(){
bodyColors.push(bodyColors.shift()); // Move first item to the end
document.body.className = bodyColors[0];
}
И тогда, когда вам это нужно в вашем приложении, просто позвоните:
bodyColors[0]; // Will refer to the current body class
Дополнительная проверка для начального состояния
В предыдущем коде предполагается, что ваш элемент body
всегда начинается с blue
. Если это не так, вы можете добавить этот одноразовый код запуска прямо под функцией switchBodyColor()
:
for(var i=0; i<bodyColors.length; i++){
if(document.body.className == bodyColors[i]) break;
bodyColors.push(bodyColors.shift());
}
Дополнительное объяснение
Так как вы хотите, чтобы цвета всегда вращались в одном и том же порядке, имеет смысл использовать массив, потому что его порядок всегда соблюдается. Однако , поскольку по крайней мере в IE7 и ниже нет "indexOf
", у нас нет способа сопоставить текущий цвет с его положением в массиве без цикла.
Здесь вступают в игру команды Array.shift
и Array.push
. Array.shift
удаляет первый элемент в массиве и возвращает его. Array.push
берет то, что ему передано, и "выталкивает" его на end массива. Объединив два метода вместе, мы можем взять первый элемент и переместить его в конец, создавая карусель вроде:
var c = [1,2,3];
c.push(c.shift());
console.log(c); // Outputs [2,3,1]
c.push(c.shift());
console.log(c); // Outputs [3,1,2]
c.push(c.shift());
console.log(c); // Outputs [1,2,3]
Таким образом, порядок всегда соблюдается, и первый элемент всегда устанавливается в соответствии с тем, что мы хотим, поэтому bodyColor[0]
всегда является текущим цветом.