gpt4 book ai didi

javascript - 如何确定元素是否在视口(viewport)上方?

转载 作者:行者123 更新时间:2023-11-29 18:42:29 30 4
gpt4 key购买 nike

我如何在 javascript 中确定一个元素是否在视口(viewport)上方(用户已经滚动过它)(不仅仅是它是否可见)?

在这段代码中:
控制台日志(iselement1aboveviewport);会返回:

  • 0,如果你还没有看到元素(元素在视口(viewport)下方)
  • 0,如果您当前看到元素(元素在视口(viewport)中)
  • 1,如果您滚动过元素(元素在视口(viewport)上方)。

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.

最佳答案

说明:

你应该使用 Element.getBoundingClientRect

The Element.getBoundingClientRect() method returns the size of an element and its position relative to the viewport.

它返回一个如下所示的对象:

{
"x": 7.997159004211426,
"y": 229.81533813476562,
"width": 425.8238525390625,
"height": 18.18181800842285,
"top": 229.81533813476562,
"right": 433.8210115432739,
"bottom": 247.99715614318848,
"left": 7.997159004211426
}

如果您想知道元素何时位于视口(viewport)上方,您需要注意 bottom 属性为 <= 0。

工作示例:

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


window.addEventListener("scroll", function(){
console.clear();
console.log(element1.getBoundingClientRect().bottom <= 0 ? "Above" : "Under");
});
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.

关于javascript - 如何确定元素是否在视口(viewport)上方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55968579/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com