javascript - 滚动到页面底部运行功能 - 功能运行次数过多。

标签 javascript jquery scroll

我正在尝试构建一个函数,当您滚动到页面底部时,它会运行一个函数以在页面上加载更多项目。

我首先放入一个没有内容的 div

<div id="loadMore"></div>

然后我在这里找到了另一个查看滚动的函数

function isScrolledIntoView(elem)
{
    var docViewTop = $(window).scrollTop();
    var docViewBottom = docViewTop + $(window).height();
    var elemTop = $(elem).offset().top;
    var elemBottom = elemTop + $(elem).height();

    console.log(docViewTop, docViewBottom, elemTop, elemBottom);
    return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <= docViewBottom) && (elemTop >= docViewTop));

}

$(window).scroll(function() {   

    if(isScrolledIntoView($('#loadMore')))
    {
        alert("reached");
        return false;

    }    
});

一个问题是警报似乎到达得太快,另一个主要问题是它多次将“到达”警报返回到屏幕 - 这显然很糟糕,因为我只希望该功能运行一次......

然后它将加载其他内容,如果再次到达页面底部,则该功能(例如警报)将再次运行

我这样做是最好的方法吗?谁能帮忙?

谢谢

最佳答案

在使用滚动功能时,您需要小心,因为 像素滚动一次就会触发一次事件。因此,您需要使用超时来仅在滚动停止时调用该函数。

试试这个例子:

let $window = $(window);
let scrollTimer = null;

let isScrolledIntoView = (elem) => {
  let $elem = $(elem);
  let docViewTop = $window.scrollTop();
  let docViewBottom = docViewTop + $window.height();
  let elemTop = $elem.offset().top;
  let elemBottom = elemTop + $elem.height();

  console.log(docViewTop, docViewBottom, elemTop, elemBottom);
  return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom) && (elemBottom <= docViewBottom) && (elemTop >= docViewTop));
}

$(window).scroll(function() {
  clearTimeout(scrollTimer);

  scrollTimer = setTimeout(function() {
    if (isScrolledIntoView($('#loadMore'))) {
      console.log("'Reached' element is visible");
    }
  }, 100);
});
.spacer {
  height: 2000px;
  border-left: 2px solid #C00;
  margin-left: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
Scroll down...
<div class="spacer"></div>
<div id="loadMore">Reached</div>
<div class="spacer"></div>

请注意,将操作延迟到重复滚动完成后的模式称为“去抖动”。

关于javascript - 滚动到页面底部运行功能 - 功能运行次数过多。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19561574/

相关文章:

javascript - jQuery 隐藏和显示不起作用

html - 如果表格较小,滚动时带有固定标题的表格将不起作用

android - 更改数字选择器对话框android的滚动方向

javascript - JsDoc、ES6 和@param {Constructor}

javascript - 在 JS/jQuery 中将一个变量加(或乘、减或除)另一个变量

jQuery Ajax加载div问题

c# - 单击表单按钮时,Asp-Page-Handler 不会触发 Razor 模型中的方法

javascript - 克隆元素及其所有事件

javascript - JQuery .text() 函数在使用面包屑代码时返回上一页元素的文本值

javascript - 滚动图像选框javascript