比较两个数字范围

时间:2014-07-19 01:31:47

标签: javascript jquery css-animations

我创建了一些视差滚动代码(我知道,我知道),而且我已经顺利运行,但我遇到了一个高级用例。 Here's a demo

现在,Chrome,Safari& amp; FF,这部分是因为我只是在他们查看时更新元素的位置。我使用此代码(在所述演示的main.js中找到)检查了这一点:

a = obj.offset + obj.height - winScroll,
b = winHeight - (obj.offset - winScroll);
if ( (a <= winHeight && a >= 0) || (b <= winHeight && b >= 0) ) {

基本上,我正在检查对象是否在视图中:

enter image description here

如果 b大于0但小于窗口的高度,那么它是可见的。

这适用于比窗口小的东西,但是那些更大的东西呢?基本上,我要做的是取一系列数字(窗口顶部和窗口顶部之间的所有像素+它的高度)并将其与另一个数字范围(偏移量)进行比较对象和对象的偏移量+它的高度)并查看是否有相同的数字。

我如何在已经拥挤的16ms内完成这项工作?

1 个答案:

答案 0 :(得分:5)

证明(A)的一种方法是反驳(¬A)。

首先,假设对象和窗口是矩形,每个矩形都有4个属性(leftrighttopbottom),它们代表坐标系中的值。

并假设原点O(0,0)是窗口的左上角,正x轴向右延伸,正y轴向下延伸相对于原点。

当且仅当至少一个以下陈述为真时,该对象不可见

  • obj.left >= window.right
  • obj.right <= window.left
  • obj.top >= window.bottom
  • obj.bottom <= window.top

将这些链接在or语句中,并否定该布尔表达式的结果。