Событие при появлении подвала в зоне видимости экрана

177
02 августа 2018, 00:50

Нужно, чтобы при появлении футера в зоне видимости экрана отработало событие, при этом высота хедера и контентной части могут быть разные.

var headerHeight = document.querySelector("header").clientHeight; 
var contentHeight = document.querySelector(".content").clientHeight; 
var footerHeight = document.querySelector("footer").clientHeight;
header { 
  height: 100px; 
  background: #ccc; 
} 
 
.content { 
  background: tomato; 
  height: 2000px; 
} 
 
footer { 
  height: 400px; 
  background: #222; 
}
<header> 
  header 
</header> 
 
<div class="content"> 
  content 
</div> 
 
<footer> 
  footer 
</footer>

Answer 1

Решение c jQuery

var $element = $('footer'); 
let counter = 0; 
 
$(window).scroll(function() { 
  var scroll = $(window).scrollTop() + $(window).height(); 
 
  //Если скролл до конца елемента 
  //var offset = $element.offset().top + $element.height(); 
 
  //Если скролл до начала елемента 
  var offset = $element.offset().top 
 
  if (scroll > offset && counter == 0) { 
    alert('footer!'); 
    counter = 1; 
  } 
});
header { 
  height: 100px; 
  background: #ccc; 
} 
 
.content { 
  background: tomato; 
  height: 2000px; 
} 
 
footer { 
  height: 400px; 
  background: #222; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<header> 
  header 
</header> 
 
<div class="content"> 
  content 
</div> 
 
<footer> 
  footer 
</footer>

Решение на чистом JS

let counter = 0; 
 
window.addEventListener("scroll", function() { 
  var elementTarget = document.querySelector("footer"); 
  //Если начало футера 
  //if(...  > (elementTarget.offsetTop - elementTarget.offsetHeight) 
  //Если конец футера 
  //if(... > (elementTarget.offsetTop)) 
  (elementTarget.offsetTop - elementTarget.offsetHeight) 
  if (!counter && window.scrollY > (elementTarget.offsetTop - elementTarget.offsetHeight)) { 
    alert("footer!"); 
    counter = 1; 
  } 
});
header { 
  height: 100px; 
  background: #ccc; 
} 
 
.content { 
  background: tomato; 
  height: 2000px; 
} 
 
footer { 
  height: 400px; 
  background: #222; 
}
<header> 
  header 
</header> 
 
<div class="content"> 
  content 
</div> 
 
<footer> 
  footer 
</footer>

READ ALSO
Текущее время на javascript

Текущее время на javascript

Мне нужно сделать с помощью javascript так, чтобы в <div class="dateandtime"></div>" выводились дата и время (число:имя месяца:год:часы:минуты:секунды)Например:...

195
Обновить src картинки

Обновить src картинки

У меня на странице img , нужно чтобы при обновлении страницы картинка выбиралась случайноВот код js

184
Помощь со скриптом

Помощь со скриптом

Помогите чтоб при клике на Открыть текст менялся на Cвернуть

173
pagination на jquery

pagination на jquery

Есть функция пагинации:

180