Javascript - запуск функції одноразово - zencoder

Є таке завдання - на сторінці розташований блок. Сторінка Скролл, тобто наявна подія scroll.

Потрібно зробити так, щоб при виникненні події scroll та виконанні певної умови спрацьовувала якась функція. Але при цьому спрацьовувала тільки один раз!

Варіант перший - метод off ()

Цей спосіб заснований на методі jQuery - .off (). Як говориться в описі, метод

видаляє подія, викликане за допомогою методу

Тобто, виконує зворотну операцію.

Розглянемо приклад нижче:

Що ми маємо в цьому коді? Бачимо, що на вікно

повішений обробник (метод

При виникненні цієї події виконується перевірка умови. Якщо умова true, то для кожного з елементів колекції spins виконати функцію.

Як тільки функція закінчить свою роботу, виконання коду переміщається на рядок

Цей рядок "говорить" - на об'єкті

зупинити подія scroll.

Ми отримали потрібний результат - при подію scroll та виконанні умови функція виконається тільки один раз.

Один важливий момент - після виконання рядки

подія scroll буде "прибите" і подальші спроби повісити handler на нього не увінчаються успіхом.

Іншими словами, якщо далі на сторінці є ще елементи, на яких потрібно обробити подія scroll, то нічого не вийде.

Варіант другий - маркер

Другий спосіб не використовує метод

але застосовує спеціальний маркер. Код простий, але ефективний. І в цьому випадку подія scroll не «вбивається", а функція виповнюється один раз:

Що є в цьому коді? Є глобальна змінна