将变量与$(window).scroll事件中的数组值进行比较

时间:2015-10-13 15:09:48

标签: javascript jquery html scroll

所以,就像标题所说的那样,我在设法将变量currentOffset与我的数组offsets进行比较时遇到了麻烦。所以,假设我在$(window).scroll();事件中有currentOffset,就像这样......

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

var i = 0;
sections.forEach(function () {
    offsets.push($(sections[i]).offset().top);
    i++;
});

$(window).scroll(function () {
    currentOffset = $(window).scrollTop();
});

我如何 经常 检查currentOffset是否> =我的数组中的偏移之一。所以我们假设该数组包含以下数据......

[8, 332, 656]

当用户滚动,且currentOffset8或大于8时,则触发事件。然后当用户点击332时,或滚动到比332更深的深度,然后触发另一个事件。

这可能吗?

3 个答案:

答案 0 :(得分:1)

尝试像这样重写循环:

var offsets = [];

$.each($('section'),function (i,v) {
    offsets.push($(v).offset().top)
});

然后在scroll事件中使用:

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;
}

答案 1 :(得分:1)

在滚动回调中,您可以遍历每个数组值并进行测试。如果你找到一个就打破。这假设数组也在递增顺序。

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;
    }
}

答案 2 :(得分:1)

这是一个小提琴:

jsfiddle.net/LsLaeakj/1

typedef struct OMX_COMPONENTTYPE {    

    OMX_VERSIONTYPE nVersion;

    OMX_ERRORTYPE (*SetParameter)(
                 OMX_HANDLETYPE hComponent, 
                 OMX_INDEXTYPE nIndex,
                 OMX_PTR pComponentParameterStructure);
...

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