Задать вопрос
@jeruthadam
Я крут

Как определить появление элемента во вьюпорт?

Я хочу выполнять определенное событие относительно элемента тогда, когда он появляется на экране пользователя. Как это сделать, куда смотерть?
  • Вопрос задан
  • 2654 просмотра
Подписаться 1 Оценить 4 комментария
Решения вопроса 2
@Ridz
full необязательный параметр, если full = true, функция вернёт true, только когда элемент полностью виден.
function elemInViewport(elem,full) {
    var box = elem.getBoundingClientRect();
    var top = box.top;
    var left = box.left;
    var bottom = box.bottom;
    var right  = box.right;
    var width = document.documentElement.clientWidth;
    var height = document.documentElement.clientHeight;
    var maxWidth = 0;
    var maxHeight = 0;
    if(full) { maxWidth = right - left; maxHeight = bottom - top};
    return Math.min(height,bottom)- Math.max(0,top) >= maxHeight && Math.min(width,right)- Math.max(0,left)>= maxWidth
}
Ответ написан
Piterski
@Piterski
Есть экспериментальная технология https://developer.mozilla.org/ru/docs/Web/API/Inte...
пример работы - https://codepen.io/callahad/pen/YxXpyN , но с поддержкой пока плохо работает в хром.

Либо же высчитывать позиционирование элемента какой-нибудь универсальной функцией типа:
getCoord = function (elem)
    {
        var box = elem.getBoundingClientRect();
        var body = document.body;
        var docEl = document.documentElement;
        
        var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
        var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
        
        var clientTop = docEl.clientTop || body.clientTop || 0;
        var clientLeft = docEl.clientLeft || body.clientLeft || 0;
        
        var top  = box.top +  scrollTop - clientTop;
        var left = box.left + scrollLeft - clientLeft;
        
        return { top: Math.round(top), left: Math.round(left) };

    };

ну и путем сравнения с видимой областью узнать виден элемент или нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы