Как найти ближайший видимый domElement в скролируемом viewPort-е
Возникла задача ― в скролируемом контейнере найти первый видимый domElement. Я подумал, что, наверняка, это довольно частая задача, и должно быть множество разных готовых решений. Порыскав по сети я нашёл лишь множество вариаций одного и того же: рекурсивный обход всего древа domElement-ов, с рассчётом их границ. В голову полезли варианты с бинарным поиском по тому же принципу, но уж больно не хотелось с этим всем связываться. Как то уж слишком сурово, для такой мелочной задачи. Должен быть "нативный" инструмент.
Увы, совсем уж нативного инструмента я не нашёл. Но нашёл, гхм, альтернативный путь. Возможно, кому-нибудь ещё пригодится.
- У контейнера, который содержит искомые domElement-ы вызываем getBoundingClientRect. Получаем его расположение на экране
- Вычисляем координаты какого-либо участка из viewPort-а, где должен находится искомый domElement
- Вызываем document.elementFromPoint, указав нужные координаты экрана
- profit…
Решение сгодится не для любого случая. Но мне вполне подошло.
Комментарии
Оставить комментарий
modules/comment
window._Comment_content_article_115 = new classes.Comment( '#comment_block_content_article_115',
{
type: 'content_article',
node_id: '115',
user: 1,
user_id: 0,
admin: 0,
view_time: null,
msg: {
empty: 'Комментарий пуст',
ask_link: 'Ссылка:',
ask_img: 'Ссылка на изображение:' }
});