Получайте уведомления, когда элемент DOM входит или выходит из области просмотра. Небольшая (~1,9 КБ в сжатом виде), независимая утилита javascript для IE9+.
camwiegert.github.io/in-view
Либо загрузите последнюю версию и включите ее в свою разметку, либо установите с помощью npm:
npm install --save in-view
С помощью in-view вы можете зарегистрировать обработчики, которые вызываются, когда элемент входит или выходит из области просмотра. Каждый обработчик получает один элемент, входящий или выходящий из области просмотра, в качестве единственного аргумента.
inView ( '.someSelector' )
. on ( 'enter' , doSomething )
. on ( 'exit' , el => {
el . style . opacity = 0.5 ;
} ) ;
in-view поддерживает отдельный реестр обработчиков для каждого набора элементов, захваченных с помощью inView(<selector>)
. Каждый реестр предоставляет одни и те же четыре метода. in-view также предоставляет четыре метода верхнего уровня. ( is
, offset
, threshold
, test
).
Зарегистрируйте обработчик для элементов, выбранных
selector
дляevent
. Единственные события, которые выдаются в поле зрения, — это'enter'
и'exit'
.
inView ( '.someSelector' ) . on ( 'enter' , doSomething ) ;
Зарегистрируйте обработчик для элементов, выбранных
selector
дляevent
. Обработчики, зарегистрированныеonce
будут вызываться только один раз.
inView ( '.someSelector' ) . once ( 'enter' , doSomething ) ;
Проверьте, находится ли
element
в области просмотра.
inView . is ( document . querySelector ( '.someSelector' ) ) ; // => true
По умолчанию In-View учитывает что-то в окне просмотра, если оно выходит за пределы какого-либо края окна просмотра. Это можно использовать для установки смещения от этого края. Например, при смещении
100
будут учитываться элементы в области просмотра, если они выходят за любой край области просмотра как минимум на100
пикселей.offset
может быть положительным или отрицательным целым числом.
inView . offset ( 100 ) ; inView . offset ( - 50 ) ;
Смещение также можно установить для каждого направления, передав объект.
inView . offset ( { top : 100 , right : 75 , bottom : 50 , left : 25 } ) ;
Установите соотношение высоты и ширины элемента, которое должно быть видимым, чтобы он учитывался в области просмотра. По умолчанию это значение
0
, что означает любую сумму. Пороговое значение0.5
или1
потребует, чтобы половина или вся высота и ширина элемента соответственно были видимыми.threshold
должен быть числом от0
до1
.inView . threshold ( 0 ) ; inView . threshold ( 0.5 ) ; inView . threshold ( 1 ) ;
Переопределить критерии видимости In-View по умолчанию с помощью пользовательской функции. Эта функция получит элемент и объект параметров в качестве единственных двух аргументов. Возвращайте
true
если элемент следует считать видимым, иfalse
в противном случае.inView . test ( ( el , options ) => { // ... } ) ;
Вручную проверьте статус элементов, выбранных
selector
. По умолчанию все реестры проверяются при событияхscroll
,resize
иload
window
.
inView ( '.someSelector' ) . check ( ) ;
Вручную генерировать
event
для любого отдельного элемента.
inView ( '.someSelector' ) . emit ( 'exit' , document . querySelectorAll ( '.someSelector' ) [ 0 ] ) ;
in-view поддерживает все современные браузеры и IE9+.
В качестве небольшого предостережения: in-view использует MutationObserver для проверки видимости зарегистрированных элементов после мутации DOM. Если вам нужна такая функциональность в IE9-10, рассмотрите возможность использования полифила.
Любая библиотека, которая отслеживает события прокрутки, рискует ухудшить производительность страницы. Чтобы смягчить это, в настоящее время in-view регистрирует только один регулируемый (максимум раз в 100 мс) прослушиватель событий для каждого события load
, resize
и scroll
window
и использует их для запуска проверки каждого реестра.
Появился новый API браузера IntersectionObserver
, целью которого является предоставление разработчикам эффективного способа проверки видимости элементов DOM. В дальнейшем in-view будет стремиться делегировать полномочия IntersectionObserver
, когда он будет поддерживаться, возвращаясь к опросу только при необходимости.
Лицензия МТИ