Dom7 — это компактная и быстрая библиотека для работы с DOM в JavaScript, обеспечивающая удобный API для манипуляций с элементами, событий, классов и стилей. Одной из важных задач при работе с интерфейсом является определение видимости элементов на странице. В Dom7 это достигается с помощью сочетания методов для работы с CSS, размерами элементов и их положением в DOM.
В Dom7 видимость элемента можно определять несколькими способами:
Через свойства CSS display и
visibility Состояние отображения элемента напрямую
влияет на его видимость.
var element = $('.my-element');
var isDisplayed = element.css('display') !== 'none';
var isVisible = element.css('visibility') !== 'hidden';
display: none полностью убирает элемент из потока
документа.visibility: hidden скрывает элемент, но он продолжает
занимать место на странице.Для полноценной проверки видимости стоит учитывать оба свойства одновременно.
Проверка размеров элемента Если ширина или высота элемента равна нулю, элемент фактически невидим.
var width = element[0].offsetWidth;
var height = element[0].offsetHeight;
var isVisible = width > 0 && height > 0;Проверка наличия в DOM и видимости родительских
элементов Элемент может быть скрыт из-за того, что его
родительский контейнер имеет display: none. Для этого можно
рекурсивно проверять всех родителей:
function isElementVisible(el) {
if (!el) return false;
if (el === document) return true;
if (Dom7(el).css('display') === 'none') return false;
return isElementVisible(el.parentNode);
}
var visible = isElementVisible(element[0]);is для фильтрации видимых элементовDom7 предоставляет метод .is(), который позволяет
проверить соответствие элемента определённому селектору. Для видимости
это удобно использовать так:
var visibleElements = $('.item').filter(function() {
return Dom7(this).is(':visible');
});
Однако стандартный селектор :visible в Dom7 отсутствует
по умолчанию, поэтому его можно реализовать через сочетание проверки CSS
и размеров:
Dom7.fn.isVisible = function() {
return this.length && this.css('display') !== 'none' && this[0].offsetWidth > 0 && this[0].offsetHeight > 0;
};
if ($('.my-element').isVisible()) {
console.log('Элемент видим');
}
Даже если элемент имеет display: block и размеры больше
нуля, он может быть скрыт за пределами видимой области окна. Для
полноценной проверки видимости используется метод получения координат
элемента:
var rect = element[0].getBoundingClientRect();
var inViewport = rect.top >= 0 && rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth);
rect.top и rect.left показывают положение
верхнего левого угла элемента относительно окна браузера.rect.bottom и rect.right показывают
положение нижнего правого угла.window.innerHeight и
window.innerWidth определяет, находится ли элемент
полностью в области видимости.Для надёжной работы можно объединить все подходы в один метод:
Dom7.fn.isFullyVisible = function() {
if (!this.length) return false;
var el = this[0];
if (el.css('display') === 'none' || el.css('visibility') === 'hidden') return false;
if (el.offsetWidth === 0 || el.offsetHeight === 0) return false;
var rect = el.getBoundingClientRect();
var inViewport = rect.top >= 0 && rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth);
return inViewport;
};
if ($('.my-element').isFullyVisible()) {
console.log('Элемент полностью видим');
}
Такой подход учитывает:
display и visibility.Определение видимости элементов широко используется для:
Использование Dom7 позволяет объединить удобный синтаксис селекторов jQuery-подобного стиля с высокой производительностью при работе с большими DOM-структурами, обеспечивая надёжную и точную проверку видимости.