Javascript 如何在div的位置添加事件侦听器?

Javascript 如何在div的位置添加事件侦听器?,javascript,html,css,Javascript,Html,Css,我希望当同级div到达视口顶部时,div的css属性发生更改 具体地说,我希望“第二个细分曲面”只有在“第一个细分曲面”到达视口顶部时才具有溢出:滚动 基本上,我想在“第二个subdiv”上设置overflow:hidden,然后写几行js,其中我会说: add.EventListener(当第一个subdiv位于顶部时,更改溢出属性) 标题 你很美 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西 好东西

我希望当同级div到达视口顶部时,div的css属性发生更改

具体地说,我希望“第二个细分曲面”只有在“第一个细分曲面”到达视口顶部时才具有溢出:滚动

基本上,我想在“第二个subdiv”上设置
overflow:hidden
,然后写几行js,其中我会说:

add.EventListener(当第一个subdiv位于顶部时,更改溢出属性)


标题
你很美
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
好东西
html,正文{
保证金:0;
填充:0;
}
.第一组{
保证金:0;
宽度:100%;
高度:80vh;
背景色:红色;
显示器:flex;
证明内容:中心;
对齐项目:居中;
h1{
颜色:白色;
}
}
.第二组{
显示器:flex;
证明内容:周围的空间;
}
.subdiv{
宽度:50%;
高度:100vh;
文本对齐:居中;
溢出:滚动;
}
.第一{
背景色:洋红色;
}
.second.v{
}
有什么帮助吗

谢谢


Matteo

让我们首先定义一个实现所需样式逻辑的函数

const EPSILON = 0.5;

function setOverflow () {
  var firstDiv = document.querySelector('.first.subdiv');
  var secondDiv = document.querySelector('.second.subdiv');
  var rect = firstDiv.getBoundingClientRect();
  if (Math.abs(rect.top) < EPSILON) {
    secondDiv.style.overflow = 'scroll';
  }
  else {
    secondDiv.style.overflow = 'hidden';
  }
}
如果函数
已被调用,但未在动画帧中执行,则函数
可能会忽略对setOverflow的重复调用


只需将这两个代码部分包装在一个
中,并将其放在

的底部即可查看Intersection Observer API,在该API中,当元素进入或退出视口时,可以触发回调:
function maybeSetOverflow () {
  if (!setOverflow.isBusy) {
    setOverflow.isBusy = true;
    window.requestAnimationFrame(() => {setOverflow.isBusy = false; setOverflow()});
  }
}

window.addEventListener('scroll', maybeSetOverflow);
window.addEventListener('resize', maybeSetOverflow);
window.addEventListener('load'  , maybeSetOverflow);