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”?这是否在正确的行上?和更新版本,使它更清楚。。。