Я ищу универсальное решение для поиска прокручиваемого контейнера элемента (я хотел бы прослушать событие прокрутки).Обычный подход заключается в обходе дерева DOM для проверки родительских элементов до тех пор, пока один из них не будет прокручиваем - здесь - некоторые решения, подобные этому.Однако это не удастся, если теневой DOM также присутствует на рисунке.
Вот пример структуры:
<app-home>
<ion-content>
#shadow-root
<div class="inner-scroll">
<slot>
-> <my-element> (reveal)
</slot>
</div>
<my-element>...</my-element>
</ion-content>
</app-home>
В приведенном выше примере прокручиваемый элемент - .inner-scroll
, который находится внутри тени.дом ion-content
.Поскольку my-element
попадает в контейнер через slot
, обход дерева никогда не достигнет контейнера прокрутки (my-element
-> ion-content
-> app-home
).
Я обнаружил, что ion-content
имеет метод getScrollElement , который можно использовать в данном конкретном случае, однако я хотел бы знать, есть ли универсальное решение на основе DOM, поскольку я хотел бы, чтобы это работало независимо от контекста.
ОБНОВЛЕНИЕ:
Чтобы было яснее, я бы хотел, чтобы my-element
был автономным, повторно используемым компонентом, который может найти свой контейнер прокрутки, где бы он ни находилсяэто размещено.Я обнаружил, что встроенный метод scrollIntoView
работает на элементе DOM и прокручивает правильный контейнер, а это означает, что браузер каким-то образом это выясняет, но не предоставляет метод, который возвращает контейнер прокрутки.
Другая идея состояла в том, чтобы прослушать событие прокрутки на более высоком уровне, не зная точного элемента, но это также не работает, потому что событие прокрутки не распространяется.
Есть идеи?