js 滚动条如何在数组里进行判断?

为了制作滚动页面,类似下拉懒加载效果。

页面有很多P标签,并且获取所有P标签的offsetTop位置值,并保存数组

    var items=$("p");
    var arr_h = [];    
    for (var i=0; i<items.length; i++){
            arr_h.push(items[i].offsetTop);
    }; 

得出结果是:

console.log(arr_h); [16, 548, 1080, 1612]

然后获取滚动条下拉位置,问题来了,如何写判断?

    $(window).scroll(function(){
        
      var scrollTop = $(document).scrollTop();
      //console.log(scrollTop); 一下拉滚动条获取到 0 1 2 3 .....100....1000
        
     //这样写不对    
     if(scrollTop == arr_h){
     
        console.log(相等的);
     }else{
     
       console.log(不相等的);
     }

    });
阅读 2.6k
4 个回答

一个数组跟一个数字怎么能相等呢,可以用数组的indexOf啊

var scrollTop = $(document).scrollTop();

if (arr_h.indexOf(scrollTop)>-1){
     
    console.log(相等的);
 }else{
 
   console.log(不相等的);
 }

楼主应该是想知道当前滚动的位置位于哪个区间吧

比如说[16, 548, 1080, 1612],当位于0~15的时候做什么事,16~548的时候做什么事,以此类推

那么可以用这种方式来处理

const pos = function(value){
    return value<=16&&'1'||value<=548&&'2'||value<=1080&&'3'||value<=1612&&'4'||'5'
}

pos(17);  //'1'
pos(177);  //'2'

这样就知道位于哪个区间了,然后分别做处理

上述判断过程也可以根据数组循环出来,我这里只是写了个示范

arr_h是个数组,不能用来比较,而且也不应该用 == 改用>=

替换掉你写不对的地方,这样就可以判断,但不太建议用相等的方式
因为scrollTop恰好等于p的offsetTop其中之一的几率很小

var match = arr_h.filter(function(v){return v===scrollTop})
if(match.length === 1) {
  console.log(match[0])
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题