loogle18
@loogle18

Почему не срабатывает условие?

Привет всем!

Подскажите пожалуйста, почему не срабатывает условие?

Сам отрезок кода:
var me = $('#me_up');
	$(win).keydown(function(pressKey) {
		console.log(pressKey.keyCode);
		if (pressKey.keyCode == 38) { // При нажатии клавиши вверх
			me.attr('src', 'deep_space/me_up.png');
		}
		else if (pressKey.keyCode == 40) { // При нажатии клавиши вниз
			me.animate({rotate : '-180deg'}, 500);
			me.attr('src', 'deep_space/me_up.png');
		}
		else if (pressKey.keyCode == 38 && me.attr('style') == 'transform: rotate(-180deg) scale(1, 1)') { // При нажатии клавиши вверх и соответствии стиля
			me.animate({rotate : '360deg'}, 500);
		}
	});


Суть проблемы в том, что при нажатии клавиши вниз, картинка делает плавный поворот на -180 град, но после этого при нажатии клавиши вверх, поворот снова осуществляться не хочет...

Заранее спасибо!
  • Вопрос задан
  • 2329 просмотров
Решения вопроса 1
@IceJOKER
Web/Android developer
Потому что срабатывает первый IF и все, else if означает , что нужно выполнить условие, если предыдущее выполнилось с false, поэтому первый выполнился, а последний так и остался ))
if (pressKey.keyCode == 38)
{
    //для этого условия код выполните в одном месте, тут можно проверить есть в аттрибуте style и т.д.
}
else if(pressKey.keyCode == 40)
{

}


И можно же без else , вряд ли у одной клавиши два значения может сработать одновременно О_О

p.s. какая-то жуткая проверка style, нельзя ли присвоить класс и потом проверять hasClass
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
conf
@conf
Ruby developer
Третья ветка
else if (pressKey.keyCode == 38 && me.attr('style') == 'transform: rotate(-180deg) scale(1, 1)') { // При нажатии клавиши вверх и соответствии стиля
      me.animate({rotate : '360deg'}, 500);
    }

никогда не выполнится, т.к. первая ветка (pressKey.keyCode == 38) содержит более мягкое условие, чем третья. Т.е. во всех случаях когда третья ветка могла бы выполниться, выполняется первая, т.к. она проверяется раньше.
Перепишите на следующий код:
if (pressKey.keyCode == 38) { // При нажатии клавиши вверх
    if (me.attr('style') == 'transform: rotate(-180deg) scale(1, 1)') { // При нажатии клавиши вверх и соответствии стиля
      me.animate({rotate : '360deg'}, 500);
    } else {
      me.attr('src', 'deep_space/me_up.png');
    }
}
    else if (pressKey.keyCode == 40) { // При нажатии клавиши вниз
      me.animate({rotate : '-180deg'}, 500);
      me.attr('src', 'deep_space/me_up.png');
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы