Javascript 性能比较两个数字范围

Javascript 性能比较两个数字范围,javascript,jquery,css-animations,Javascript,Jquery,Css Animations,我正在创建一些视差滚动代码(我知道,我知道),我已经顺利运行了,但是我遇到了一个高级用例的障碍 在Chrome、Safari和FF中,它现在是一个黄油般平滑的60帧每秒,这部分是因为我只是在更新元素在视图中的位置。我使用以下代码检查此问题(在所述演示的中找到): a=obj.offset+obj.height-winScroll, b=winHeight-(对象偏移量-winScroll); 如果((a=0)|(b=0)){ 基本上,我正在检查对象是否在视图中,如下所示: 如果a或b大于0但

我正在创建一些视差滚动代码(我知道,我知道),我已经顺利运行了,但是我遇到了一个高级用例的障碍

在Chrome、Safari和FF中,它现在是一个黄油般平滑的60帧每秒,这部分是因为我只是在更新元素在视图中的位置。我使用以下代码检查此问题(在所述演示的中找到):

a=obj.offset+obj.height-winScroll,
b=winHeight-(对象偏移量-winScroll);
如果((a=0)|(b=0)){
基本上,我正在检查对象是否在视图中,如下所示:

如果ab大于0但小于窗口高度,则该窗口可见

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

在已经拥挤的16毫秒中,我如何做到这一点?证明(A)的一种方法是反驳(A)

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

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

当且仅当以下语句中至少有一条为真时,对象才是不可见的:

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

  • obj.bottom您可以引入一个索引并按它对元素排序。查找最低和最高可见索引,中间的所有内容都可见,其余的则不可见。
    
    a = obj.offset + obj.height - winScroll,
    b = winHeight - (obj.offset - winScroll);
    if ( (a <= winHeight && a >= 0) || (b <= winHeight && b >= 0) ) {