如何确定元素是否在视口上方?

时间:2019-05-03 11:08:04

标签: javascript

如何在javascript中确定某个元素是否位于视口上方(用户已滚动经过该视口)(不仅是可以看到?)?

在此代码段中:
console.log(iselement1aboveviewport);会返回:

  • 0,如果您尚未看到该元素(该元素位于视口下方)
  • 0,如果您当前看到元素(元素在视口中)
  • 1,如果滚动到元素上方(元素在视口上方)。

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et imperdiet nulla. Morbi malesuada consectetur nisl, ut iaculis sapien. Praesent molestie lobortis purus efficitur vehicula. Quisque elementum tortor sit amet condimentum rhoncus. Etiam molestie porttitor nisi, vel porttitor orci dignissim a. Aliquam a est felis. Quisque libero neque, ultricies a nunc nec, hendrerit euismod ligula. Vestibulum viverra egestas magna malesuada ornare. Sed in cursus est, eget convallis arcu.

Integer ante lorem, sagittis quis turpis quis, congue feugiat risus. Cras mollis porttitor rutrum. Fusce eget nisi ut nisl bibendum sollicitudin. Donec tempus accumsan elit, ut hendrerit odio commodo ut. Sed ac interdum massa. Vivamus elementum efficitur nulla sit amet varius. Suspendisse purus mi, laoreet eget ligula molestie, egestas sodales erat.

<div id="element1" style="color: orange;">Am I above the viewport? (have you scrolled past me?)</div>

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam et imperdiet nulla. Morbi malesuada consectetur nisl, ut iaculis sapien. Praesent molestie lobortis purus efficitur vehicula. Quisque elementum tortor sit amet condimentum rhoncus. Etiam molestie porttitor nisi, vel porttitor orci dignissim a. Aliquam a est felis. Quisque libero neque, ultricies a nunc nec, hendrerit euismod ligula. Vestibulum viverra egestas magna malesuada ornare. Sed in cursus est, eget convallis arcu.

Fusce gravida tellus fermentum massa faucibus scelerisque. Vestibulum consequat dolor libero, sed lobortis ligula eleifend at. Sed porttitor odio nec enim pulvinar pulvinar. Vivamus vulputate sollicitudin nisi et ullamcorper. Aenean et ultrices nunc. Donec ligula dolor, lobortis in vestibulum at, ultrices ac lectus. Nunc tristique arcu eu felis finibus commodo. Ut lacinia tincidunt dui, venenatis lacinia orci imperdiet in.

Nam maximus at quam eu rhoncus. Mauris auctor efficitur dignissim. Proin porttitor nunc ut tortor aliquet, a tincidunt tortor luctus. Suspendisse dapibus dui sapien, sed elementum ex pellentesque a. Quisque tortor massa, pretium vel lacus non, accumsan convallis leo. Nunc nec orci mi. Phasellus id massa ipsum. Aenean non ornare neque, ultricies vestibulum tellus. Aliquam quis laoreet orci. Cras faucibus massa in ultricies consectetur. Duis et odio nec dolor sollicitudin condimentum.

Integer ante lorem, sagittis quis turpis quis, congue feugiat risus. Cras mollis porttitor rutrum. Fusce eget nisi ut nisl bibendum sollicitudin. Donec tempus accumsan elit, ut hendrerit odio commodo ut. Sed ac interdum massa. Vivamus elementum efficitur nulla sit amet varius. Suspendisse purus mi, laoreet eget ligula molestie, egestas sodales erat.

1 个答案:

答案 0 :(得分:2)

说明:

您应该使用Element.getBoundingClientRect

  

Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。

它返回一个看起来像这样的对象:

pollutantmean()

如果您想知道元素何时位于视口上方,则需要注意{ "x": 7.997159004211426, "y": 229.81533813476562, "width": 425.8238525390625, "height": 18.18181800842285, "top": 229.81533813476562, "right": 433.8210115432739, "bottom": 247.99715614318848, "left": 7.997159004211426 } 属性为<= 0。

工作示例:

bottom
const element1 = document.getElementById("element1");


window.addEventListener("scroll", function(){
  console.clear();
  console.log(element1.getBoundingClientRect().bottom <= 0 ? "Above" : "Under");
});