【发布时间】:2017-04-21 22:43:33
【问题描述】:
我似乎无法弄清楚为什么这段代码作为 while 循环和递归函数会无限运行。 我正在检查一个元素是否在视口中,如果不在,则将其父元素的顶部偏移量向上移动,直到其子元素离开视口。
HTML 结构:
<div id="outter">
<div id="inner"></div>
<div id="inner"></div>
<div id="inner"></div>
</div>
它们都有设置的高度和宽度,并且是 display:inline-block 和可见的。
我已经有一个 jQuery 伪类来检查元素是否在屏幕外,例如 `.is(':offscreen')。它工作正常,但我想知道原始值是否缓存在 jQuery 中的某个地方。
在代码中:
var top=1;
do{
$('#outter').css('top', top);
top++;
}
while(!$('#inner').is(':offscreen'));
这是在 StackOverflow 上找到的屏幕外 psuedoclass 的代码:
jQuery.expr.filters.offscreen = function(el) {
var rect = el.getBoundingClientRect();
return(
(rect.x + rect.width) < 0 || (rect.y + rect.height) < 0 ||
(rect.x > window.innerWidth || rect.y > window.innerHeight));
};
【问题讨论】:
-
您不能重复使用 ID。多个
id="inner"s 无效。 -
@Xufox 感谢您指出这一点,但这只是在此示例代码中
标签: javascript jquery