滚动到页面底部运行function – 函数运行太多次。

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

我从一个没有内容的div开始

然后我在这里发现另一个看滚动的function

 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 = docViewTop)); } $(window).scroll(function() { if(isScrolledIntoView($('#loadMore'))) { alert("reached"); return false; } }); 

一个问题是它似乎很快达到警报,而另一个主要问题是它多次警告“到达”屏幕 – 这显然很糟糕,因为我只希望该function运行一次……

然后它将加载其他内容,如果再次到达页面的底部,那么函数(例如警报)将再次运行

我是最好的方式吗? 任何人都可以帮忙吗?

谢谢

使用滚动function时,您需要小心,因为滚动一个像素都会触发一次事件。 因此,您需要使用超时仅在滚动停止时调用该函数。 试试这个:

 var timer; $(window).scroll(function () { clearTimeout(timer); timer = setTimeout(function() { if (isScrolledIntoView($('#loadMore'))) { alert("reached"); return false; } }, 50); }); 

示例小提琴

你应该只绑定你的函数一次。 在向页面添加新项目后,您可以检查是否有更多项目可用并再次重新绑定此function。

 var addNewContent = function () { // get new data // append new data $('#content').prepend($('
some content
')); // rebind the event, if still more data is available $('#content').one( 'endofcontent', addNewContent); }; $('#content').one("endofcontent", addNewContent); $(window,document).scroll(function() { if(isScrolledIntoView($('#loadMore'))) { $('#content').trigger("endofcontent"); return false; } });

测试一下: http : //fiddle.jshell.net/d5CSd/