Как проверить, не переполняется ли контейнер сверху?

#javascript #html #css #overflow

Вопрос:

Я очищаю Слабину, используя Кукольника. Я хочу проверить, прокрутил ли я начало ленты канала.

Проблема в том, что канал не прокручивается, поэтому я не могу использовать метод, описанный в MDN:

 element.scrollHeight - Math.abs(element.scrollTop) === element.clientHeight
 

В моем случае, когда элемент не прокручивается, но имеет переполненные дочерние элементы, они предлагают проверить вычисленный стиль:

 window.getComputedStyle(element).overflowY === 'visible'
 

Однако это не работает, я полагаю, по двум причинам. Во-первых, в этом случае похоже, что скрытое переполнение установлено в другой родительский контейнер, поэтому для контейнера, на который я смотрю, всегда установлен вычисляемый overflowY стиль visible . Во-вторых, дочерние элементы всегда будут переполняться в направлении Y, если я прокручен до самого верха (если я нахожусь вверху, они переполняются внизу).

Итак, как мне проверить, переполняется ли контейнер сверху и только сверху?

Если вы хотите проверить свой код на конкретном элементе, который я пытаюсь проверить в приложении Slack, вы входите в рабочую область Slack и выбираете этот элемент в консоли с помощью:

 document.querySelector(`[aria-label="${channelName} (channel)"]`)
 

Где channelName есть что-то вроде «общие» или как там называется активный канал, на котором отображается его канал.

Ответ №1:

Наконец, я нашел решение, которое делает свою работу. Я хватаю контейнер подачи канала и проверяю положение его верхнего края относительно окна просмотра. Если он отрицательный, то это означает, что еще многое нужно прокрутить.

 const channelFeed = document.querySelector(`[aria-label="${channelName} (channel)"]`)
const isScrolledToTop = channelFeed.getBoundingClientRect().y > 0
 

Это работает, так как контейнер канала не прокручивается. Он содержит элементы (сообщения), и он существует на странице во всю длину, за исключением того, что переполнение скрыто вверху и внизу. Это означает, что я могу проверить, по-прежнему ли верхний край выходит за пределы окна просмотра.