我创建了一些视差滚动代码(我知道,我知道),而且我已经顺利运行,但我遇到了一个高级用例。 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) ) {
基本上,我正在检查对象是否在视图中:
如果或 b大于0但小于窗口的高度,那么它是可见的。
这适用于比窗口小的东西,但是那些更大的东西呢?基本上,我要做的是取一系列数字(窗口顶部和窗口顶部之间的所有像素+它的高度)并将其与另一个数字范围(偏移量)进行比较对象和对象的偏移量+它的高度)并查看是否有相同的数字。
我如何在已经拥挤的16ms内完成这项工作?
答案 0 :(得分:5)
证明(A)的一种方法是反驳(¬A)。
首先,假设对象和窗口是矩形,每个矩形都有4个属性(left
,right
,top
,bottom
),它们代表坐标系中的值。
并假设原点O(0,0)
是窗口的左上角,正x轴向右延伸,正y轴向下延伸相对于原点。
当且仅当至少一个以下陈述为真时,该对象不可见:
obj.left >= window.right
obj.right <= window.left
obj.top >= window.bottom
obj.bottom <= window.top
将这些链接在or
语句中,并否定该布尔表达式的结果。