Я хочу наблюдать за событием mousewheel
с помощью RxJS-DOM, чтобы, когда срабатывает первое событие, я пересылаю его, а затем отбрасываю все значения до тех пор, пока задержка между последующими значениями не пройдет ранее заданную продолжительность.
Оператор, который я представляю, может выглядеть примерно так:
Rx.DOM.fromEvent(window, 'mousewheel', (e) => e.deltaY)
.timegate(500 /* ms */)
Представьте себе следующий поток данных:
0 - (200 ms) - 1 - (400ms) - 2 - (600ms) - 3
где отправляемое значение - это число, а время описывает, сколько времени потребуется для получения следующего значения. Поскольку 0 является первым значением, оно будет выдано, а затем все значения до 3 будут отброшены, потому что отдельные задержки между последующими значениями не превышают 500ms
.
В отличие от дроссельной заслонки, временная задержка между значениями вычисляется независимо от того, было ли выпущено последнее полученное значение или нет. С дроссельной заслонкой будет отправлено 0, пройдет 200 мс, 1 будет оценено и завершится ошибкой, пройдет 400 мс, а 2 будет оценено и ПРОЙДЕН, потому что время между последним выданным значением (0) и текущим полученным (2 ) составляет 600 мс, тогда как с моим оператором он будет оцениваться относительно 1, а время будет составлять 400 мс, поэтому тест не пройден.
И этот оператор тоже не дребезжит. Вместо того, чтобы ждать, пока истечет интервал для выдачи, он сначала отправляет первое значение, затем сравнивается со всеми будущими значениями и так далее.
Такой оператор уже существует? А если нет, как бы я его сделал?