Javascript 将变量与$(窗口)中的数组值进行比较。滚动事件

Javascript 将变量与$(窗口)中的数组值进行比较。滚动事件,javascript,jquery,html,scroll,Javascript,Jquery,Html,Scroll,因此,正如标题所说,我很难找到一种方法来比较一个变量,currentOffset和我的数组offset。假设我在$(window.scroll()中有currentOffset事件,就像这样 var currentOffset=0; var sections=$('section').get(); var抵销=[]; var i=0; 节.forEach(函数(){ offset.push($(第[i]节)offset().top); i++; }); $(窗口)。滚动(函数(){ curre

因此,正如标题所说,我很难找到一种方法来比较一个变量,
currentOffset
和我的数组
offset
。假设我在
$(window.scroll()中有currentOffset事件,就像这样

var currentOffset=0;
var sections=$('section').get();
var抵销=[];
var i=0;
节.forEach(函数(){
offset.push($(第[i]节)offset().top);
i++;
});
$(窗口)。滚动(函数(){
currentOffset=$(窗口).scrollTop();

});尝试如下重写循环:

var offsets = [];

$.each($('section'),function (i,v) {
    offsets.push($(v).offset().top)
});
然后在滚动事件中使用以下命令:

var prevScroll = offsets[0]!=null ? offsets[0] : 0;
var toTrigger = 0;
$.each(offsets,function(i,v){
    if(i>0 && currentOffset >= prevScroll && currentOffset < v){
        toTrigger = i;
        return true;
    }
    prevScroll = v; 
});

switch(toTrigger){
    case 1: 
        function1();
        break;
    case 2:
        function2();
        break;
    case 3:
        function3();
        break;
}
var prevScroll=偏移量[0]=无效的偏移量[0]:0;
var toTrigger=0;
$。每个(偏移量、功能(i、v){
如果(i>0&¤tOffset>=prevScroll&¤tOffset
在滚动回调中,您可以循环遍历每个数组值并进行测试。如果你找到一个,就要打破它。这假设数组也是按递增顺序排列的

var offset, nextOffset, length = offsets.length;
for (var index = 0; index < length; index++) {
    offset = offsets[index];
    nextOffset = offsets[index + 1];
    if (index == length - 1 && currentOffset >= offset) {
        // if last index don't bother checking next value, trigger event
    }
    else if (currentOffset >= offset && nextOffset && currentOffset < nextOffset) {
        // trigger event
        break;
    }
}
var offset,nextofset,length=offset.length;
对于(var索引=0;索引<长度;索引++){
偏移量=偏移量[索引];
NEXTOFSET=偏移量[索引+1];
如果(索引==长度-1&¤tOffset>=偏移量){
//若最后一个索引并没有检查下一个值,那个么触发事件
}
else if(currentOffset>=偏移量和下一个偏移量和当前偏移量<下一个偏移量){
//触发事件
打破
}
}
这里有一把小提琴:

jsfiddle.net/LsLaeakj/1

var currentOffset = 0;
var sections = $('section').toArray();
var offsets = [];

for (var i = 0; i < sections.length; i++){
 offsets.push($(sections[i]).offset().top);   
}

console.log(offsets);

$(window).scroll(function () {
    currentOffset = $(window).scrollTop();
    console.log(checkOffset());
   $('section').css('background-color', 'white'); $(sections[checkOffset()]).css('background-color', 'red');
});

function checkOffset(){
 for (var i = 0; i < offsets.length; i++){
    if (offsets[i] > currentOffset){
        return i-1;
    }
 }
 return offsets.length
}
var currentOffset=0;
var sections=$('section').toArray();
var抵销=[];
对于(变量i=0;icurrentOffset){
返回i-1;
}
}
返回长度
}

它将最后一个offset div设置为红色背景,并将其记录到控制台。显然,这是可以改变的,但希望它能说明您所追求的功能

.get()是您想要使用的吗?似乎toArray()可能就是您想要的。@Donuttt它们都返回一个数组。toArray()可能是返回节值的正确方法。但是,get()似乎返回相同的结果。不幸的是,这并不能真正解决我的问题。很酷,谢谢,很高兴知道。您是否正在尝试获取css属性“top”?这是否在正确的行上?和更新版本,使它更清楚。。。