【问题标题】:Detecting or triggering event when elements are within a certain area in its parent当元素在其父元素的某个区域内时检测或触发事件
【发布时间】:2013-02-17 21:08:18
【问题描述】:

div 中,将 overflow-y 设置为 scroll(只有部分可见)会有 关键元素不同高度(在本例中为divs)。我的计划是每次看到这些关键元素时都 ping 服务器。

示例:父 div 的高度为 1000px,但实际上只有 80px 和 420px 之间的区域可见。里面会有大约 30 个其他 不可预测 高度的关键 div。举例来说,假设我需要在 整个键 div #27 位于其父级的第 80 和第 420 个像素之间时 ping 服务器。

我有将所有子 div 的高度存储在一个全局数组中以供以后使用的想法,但这似乎不是最明智的选择。我真的不确定如何在这种情况下触发事件。如果是倾听者,谁应该倾听?为了什么?

实现这一目标的最佳方法是什么?我对 jQuery 或纯 JavaScript 都很满意。

【问题讨论】:

  • 可以给$("#container-div").on('scroll'绑定一个方法,检查每个div的.position().top + .height是否大于父div的.scrollTop,但小于scrollTop + height (420px)。你只担​​心垂直还是水平?
  • 这是我的第一个想法。我会让它遍历所有的 div 并检查它们中的每一个是否在父级的可见部分中都有它的“头”和“脚”。我对这种方法的担忧在于处理能力,因为我认为机器不会停止循环,直到用户停止滚动或者我错了吗?
  • 这取决于你有多少这些 div。你有没有试过看看它是否有效?
  • 正如我所料,每次滚动 div 时机器都会运行循环。我不能确切地说多少次,但它似乎只有 1 个像素。并且 div 没有像以前那样平滑滚动。现在我只有 8 个子 div,但在现实生活中可能会超过 100 个。
  • 不是在每个滚动事件上都这样做,你可以在计时器上这样做;就像在滚动时为 100 MS 设置超时并在滚动时清除它(所以它最多每 100 MS 发生一次)。除此之外,我们可以努力提高代码效率,但可能会有上限。

标签: javascript html jquery listener dom-events


【解决方案1】:

对于任何需要解决类似问题的人...

我通过将要监视的 DIV 的 ID 存储在关联数组中并使用 .on("scroll", function) 将事件处理程序附加到父 DIV 来使其工作。

每次用户滚动父 DIV 时,它都会循环遍历数组以检查子边框 ($("#childdiv").position().top + $("#childdiv").height()) 的位置是否低于父 DIV 的高度(以确保整个 DIV 可见)。

我还发现使用 delete Array[id]; 从数组中删除项目并执行我想要的操作是明智的。

如果有人有更好的想法,我很乐意听到。

猜你喜欢
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2018-10-21
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多