Срабатывание функции один раз при динамически меняющемся условии
Всем привет, есть переменная меняющаяся динамически
let offset; // number, value 0, 1, 1.2, 100, 120 ... etc мне нужно как то задать условие, чтобы при значении offset > 100 вызывалась функция, но только один раз , о в обратную сторону так же, примерно так if(offset > 100) { // функция сработала один раз } else if(offset < 100) { // функция опять сработала один раз } то есть, получив значение 100, 101 или 102 или любое число более 100 мы вызвали функцию и забыли о ней, пока не получим 99, 98 или любое число менее 100 и потом опять забыли. Заранее благодарен! |
let offset = 0; function func() { alert('preved'); } function updateOffset(v) { const exec = v > 100 && offset <= 100 || v < 100 && offset >= 100; offset = v; if (exec) { func(); // вызов функции } } |
Alexandroppolus,
Спасибо! Но я не смог разобраться, если честно. Аргументом для функции updateOffset() при ее вызове мне надо передавать offset? А для чего тогда мы его объявляем как let offset = 0; ведь он у нас есть уже? |
В let offset хранится предыдущее значение.
А как параметр функции при вызове передается текущее значение. updateOffset(10); updateOffset(20); updateOffset(101); // сработало updateOffset(110); updateOffset(120); updateOffset(105); updateOffset(99); // сработало updateOffset(80); |
Цитата:
|
Цитата:
Например так let previousOffset = 0; function func() { alert('preved'); } function updateOffset(v) { const exec = v > 100 && previousOffsetoffset <= 100 || v < 100 && previousOffset >= 100; previousOffset = v; if (exec) { func(); // вызов функции } } |
Цитата:
|
Цитата:
bodyScrollBar.addListener(function(status){ // прокрутка страницы // status.offset.y - отступ сверху let offset = 0; function collapseHeader() { $('.header__top').slideToggle(350); } function updateOffset(v) { const exec = v > 100 && offset <= 100 || v < 100 && offset >= 100; offset = v; if (exec) { collapseHeader(); } } updateOffset(status.offset.y) образно говоря, мне нужно скрывать хедер при прокрутке более 100 пикселей и раскрывать когда страница проскролена наверх. Но чего то идет не так)) |
Не знаю ничего про этот плагин, но каждый раз, когда срабатывает обработчик, заданный в
bodyScrollBar.addListener(function(status){ у вас заводится внутри функции переменная let offset = 0; Зачем внутри обработчика каждый раз объявлять переменную и функции? Вынесите их во вне. let offset = 0; function collapseHeader() { $('.header__top').slideToggle(350); } function updateOffset(v) { const exec = v > 100 && offset <= 100 || v < 100 && offset >= 100; offset = v; if (exec) { collapseHeader(); } } bodyScrollBar.addListener(function(status){ // прокрутка страницы // status.offset.y - отступ сверху updateOffset(status.offset.y) |
voraa,
Спасибо! Работает! |
Alexandroppolus,
Спасибо вам огромное, решение полностью рабочее, это я уже косячил что не получалось. Все отлично, еще раз вам спасибо! |
Часовой пояс GMT +3, время: 18:20. |