Елена, ну вот этот обозреватель как раз реагирует на появление в зоне видимости наблюдаемого элемента. Именно на переход из "не видно" – "видно". Но реагирует на любой кусок элемента - в т.ч. на нижний край - как только появится - сработает.
Поэтому, наверное, надо добавить элемент с высотой 1px или даже 0 – и слушать видимость на нём.
trydim, если неизвестен, придётся рисовать копию кнопки поверх оригинала, и на неё вешать своих слушателей и вызывать click по невидимой исходной кнопке в нужный момент.
burtellbee, свойство элемента classList содержит DOMTokenList у которого не так много методов.
Но можно из него по-быстрому сделать массив, исползуя ... spread operator. (подробнее на русском).
А у массива уже есть нужный метод some().
0xD34F, на лаконичный вариант с оператором ||=, как и на сам оператор, я обратил внимание только сейчас, благодаря вашему ответу. Разумеется, оператор не впервые в ваших ответах, но я нерегулярно заглядываю на QnA.