Срабатывание функции один раз при динамически меняющемся условии
Всем привет, есть переменная меняющаяся динамически
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,
Спасибо! Работает! |
| Часовой пояс GMT +3, время: 05:25. |