Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跟踪元素之外的滚动位置_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 跟踪元素之外的滚动位置

Javascript 跟踪元素之外的滚动位置,javascript,jquery,dom,Javascript,Jquery,Dom,我正在组装一个jQuery插件。该插件将获取面板,并自动调整其高度。所以我从这样的事情开始: <div class="panel">Test 1</div> <div class="panel">Test 2</div> <div class="panel">Test 3</div> 有一个向下按钮,单击该按钮时,用户将进入下一个$(“.panel): 有了这些,我就可以跟踪他们所使用的面板索引: if (pane

我正在组装一个jQuery插件。该插件将获取面板,并自动调整其高度。所以我从这样的事情开始:

<div class="panel">Test 1</div>
<div class="panel">Test 2</div>
<div class="panel">Test 3</div>
有一个向下按钮,单击该按钮时,用户将进入下一个$(“.panel):

有了这些,我就可以跟踪他们所使用的面板索引:

    if (panelIndex < (panelCount - 1) ) {
      panelIndex += 1;
    }
if(面板索引<(面板计数-1)){
指数+=1;
}
我试图找出一种方法来跟踪它们是否发生手动滚动,并传递其中一个元素,然后增加“panelIndex”,这样按钮就不会向上而不是向下移动它们,因为由于用户使用滚动条而不是按钮,所以它从未正确地递增。这就是我到目前为止所做的:

   $(window).scroll(function(){
    panels.each(function(index){
      if ($(window).scrollTop() > $(this).scrollTop()) { 
        panelIndex = index; 
        // console.log(index);
      }
    });

    if (panelIndex < panelCount - 1){
      s.showDownButton();
    }
  });
$(窗口)。滚动(函数(){
面板。每个面板(功能(索引){
如果($(窗口).scrollTop()>$(此).scrollTop()){
panelIndex=指数;
//控制台日志(索引);
}
});
if(panelIndex

代码检查过多,感觉有些过火。有更好的方法吗?

一个简单的优化方法是只计算一次scrollTop,并在找到匹配项时退出每个循环。您可以通过返回false退出$。每个循环

$(window).scroll(function(){
    var scrollTop = $(window).scrollTop();
    panels.each(function(index){
        if (scrollTop > $(this).scrollTop()) { 
            panelIndex = index; 
        } else {
            return false;
        }
    });

    if (panelIndex < panelCount - 1){
        s.showDownButton();
    }
});
$(窗口)中,滚动(function()
而不是窗口,尝试给出面板父div的id
   $(window).scroll(function(){
    panels.each(function(index){
      if ($(window).scrollTop() > $(this).scrollTop()) { 
        panelIndex = index; 
        // console.log(index);
      }
    });

    if (panelIndex < panelCount - 1){
      s.showDownButton();
    }
  });
$(window).scroll(function(){
    var scrollTop = $(window).scrollTop();
    panels.each(function(index){
        if (scrollTop > $(this).scrollTop()) { 
            panelIndex = index; 
        } else {
            return false;
        }
    });

    if (panelIndex < panelCount - 1){
        s.showDownButton();
    }
});
var panelTops = [];

findPanelTops(); // calculate on load
$(window).on("resize", findPanelTops); // calculate on resize

function findPanelTops() {
    panelTops = [];
    panels.each(function(index) {
        panelTops.push($(this).scrollTop());
    });
}

$(window).scroll(function(){
    var scrollTop = $(window).scrollTop();
    for (var i = 0; i < panelTops.length; i++) {
        if (scrollTop > panelTops[i]) { 
            panelIndex = i;
        } else {
            break;
        }
    };

    if (panelIndex < panelCount - 1){
        s.showDownButton();
    }
});
var scrollTimeout = null;

function onScroll() {
    if (scrollTimeout) {
        clearTimeout(scrollTimeout);
    }
    scrollTimeout = setTimeout(onScrollEnd, 500);
}

function onScrollEnd() {
    // Scrolling has stopped
    // Do stuff ...

   scrollTimeout = null;
}

$(window).on("scroll", onScroll);