DimaChemerys
@DimaChemerys

Как сделать так, что-бы условие выполнялось после того, как оно будет НЕ выполнено один раз?

Здравствуйте, есть вот такое вот условие:
if (top_offset <= general_logo_offset.top - 55 && top_offset >= 0){}

И мне нужно, что-бы оно выполнялось сразу после того, как вот этот вот top_offset >= general_logo_offset.top (оффсет станет больше), как мне это правильно сделать?
  • Вопрос задан
  • 256 просмотров
Пригласить эксперта
Ответы на вопрос 2
Jeer
@Jeer
уверенный пользователь
Если вам нужно (top_offset >= general_logo_offset.top) то зачем вы в условии пишете "<="?

Отвечая на вопрос, вы можете подставить НЕ к условию, если у вас в выражении получается false, и вам нужно попасть в тело этого условия (при условии, что вы всё учли и ничего не напутали), например:

if ( !(top_offset <= general_logo_offset.top - 55 && top_offset >= 0) ) {}


Как вы понимаете, такой вариант очень трудночитаем. Другой вариант, вы оставляете условие таким, но тело переносите в блок else, например:

if (top_offset <= general_logo_offset.top - 55 && top_offset >= 0){}
else {
  // вот сюда
}


Если у вас настолько сложное условие, что вы сами сейчас путаетесь, то так делать не нужно. Как вариант, вы можете разбить сложное условие на несколько вложенных, если вам нужны всё же разные результаты, и если это упростит читаемость. Если вам всё же нужно одно сложное выражение, то необходимо его вынести в отдельную функцию или геттер с читаемым названием, тогда код упростится:

if (!expression) { }
Ответ написан
Комментировать
AngReload
@AngReload
Кратко о себе
Как-то так?
// global variable
let isBeforeWasNotOffset = false;

function myAwesomeListener() {
  if (top_offset >= general_logo_offset.top) isBeforeWasNotOffset = true;
  if (isBeforeWasNotOffset &&
      top_offset <= general_logo_offset.top - 55 && top_offset >= 0
  ) {
    // bla bla bla
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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