Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当元素位于其父元素的某个区域内时检测或触发事件_Javascript_Html_Jquery_Listener_Dom Events - Fatal编程技术网

Javascript 当元素位于其父元素的某个区域内时检测或触发事件

Javascript 当元素位于其父元素的某个区域内时检测或触发事件,javascript,html,jquery,listener,dom-events,Javascript,Html,Jquery,Listener,Dom Events,在div中,如果overflow-y设置为scroll(仅部分可见),则会有高度不同的关键元素(在本例中为divs)。我的计划是在每次看到这些关键元素时ping服务器 示例:父div是1000px高,但实际上只有80px和420px之间的区域可见。内部将有大约30个高度不可预测的其他关键div。举个例子,假设我需要在整个key div#27位于其父项的第80和第420个像素之间时ping服务器 我有一个想法,将所有子div的高度存储在一个全局数组中,供以后使用,但这似乎不是最明智的选择。我真的不

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

示例:父div1000px高,但实际上只有80px和420px之间的区域可见。内部将有大约30个
高度不可预测的其他关键div。举个例子,假设我需要在整个key div#27位于其父项的第80和第420个像素之间时ping服务器

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


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

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

我将要监视的DIV的id存储在一个关联数组中,并使用
.on(“scroll”,function)
将事件处理程序附加到父DIV,从而使其正常工作

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

我还发现明智的做法是使用
deletearray[id]从数组中删除该项
并执行我想要的操作


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

您可以将一个方法绑定到
$(“#container div”)。在('scroll'
上,检查每个div的
.position().top+.height
是否大于父div的
.scrollTop
,但小于scrollTop+height(420px).你只担心垂直还是水平?这是我的第一个想法。我会让它在所有的div中循环,检查每个div是否有“头”和“脚”在父对象的可见部分内。我对这种方法的关注是关于处理能力,因为我想象机器在用户停止滚动之前不会停止循环,还是我错了?这取决于你有多少个div。你是否尝试过它,看看它是否有效?正如我所预期的那样,机器每次运行div时都会运行循环是滚动的。我不能确切地说有多少次,但它似乎只有1个像素。而且div的滚动也不像以前那么平滑。现在我只有8个子div,但在现实生活中它可能会超过100。与其在每个滚动事件上都这样做,不如在计时器上做;比如在scrol上设置100毫秒的超时l并在scroll上清除它(因此最多每100毫秒发生一次)。除此之外,我们可以努力提高代码的效率,但这可能有一个上限。。