我试图使Jscroll无限滚动一个div图像,但是我发现它一被触发就立即加载它可以加载的所有页面。在Opera,Chrome和Firefox上,这意味着它会在几秒钟的时间内加载数千个页面,从而导致浏览器崩溃。在Microsoft Edge上,这意味着它可以在用户向上或向下滚动时加载页面。
这是我对相关div的html标记;
<div id="images-wall">
<div class="home-thumb col-md-2 col-sm-3 col-xs-4 no-padding"><a href="/image/22" target="_blank"><picture><img class="home-img" src="//thumb.example.com/webp/22.webp" title="Image Name"></picture></a></div>
<nav id="#next"><a href="/more/home/2016-02-12+17:36:45"></a></nav></div>
</div>
这就是我用来调用jscroll的Javascript;
function reLayout(){
console.log("Loaded new images.");
}
$('#images-wall').jscroll({
debug: true,
padding: 0,
callback: reLayout,
loadingHtml: 'LOADING MORE'
});
这是Jscroll放在控制台中的调试输出;
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
js.js:15376 jScroll: -3082 from bottom. Loading next request...
js.js:15376 Object
这类似于我之前在项目中用于实现jscroll的标记,在这里我做错了什么?
编辑:
我仅用此HTML代码制作了一个最小的示例。
<script src="/static/js2.js"></script>
<div id="images-wall">
<a href="/image/22/" target="_blank">
<img class="home-img" src="//thumb.example.com/webp/22.webp" title="Title of the image.">
</a>
<a href="/more/home/2016-02-12+17:36:45"></a>
</div>
并且可以找到here的Javascript代码仍然存在。
最佳答案
我遇到了完全相同的问题。
当以下情况时,jscroll将触发呼叫
从可滚动内容底部开始触发加载下一组内容的距离。仅当autoTrigger设置为true时适用。
您的padding
为0。请考虑一秒钟cpu可以执行多少操作,然后考虑用户滚动到底部时将发生什么情况。 javascript会发出对服务器的请求,例如BAM BAM BAM BAM。这就是为什么所有图像都同时出现的原因。
我的解决方案是一个名为isPaging
的布尔变量。发送ajax请求时,需要将其设置为true
,并将其设置为响应回调中的false
。在ajax请求中(您可能必须重写/修改jscroll函数),检查是否isPaging==true
。如果是这样,只需返回即可,这样就不会再次发送请求。
这样,自动加载将仅发生一次。收到响应后,容器将填充内容,并且其滚动条将向上移动。然后,用户可以再次向下滚动到底部,依此类推。
编辑:发现了问题,有点。当jscroll容器依赖于窗口进行滚动而不是它自己的滚动条时,Jscroll似乎中断了。因此,滚动位置的jscroll计算变得一团糟。我仍然不知道根本原因,但我确实计划向创作者提出问题。 (编辑:我看到您已经提出了问题,然后我将其添加。)
将此添加到您的大型文件链接即可解决此问题。
<style>
#images-wall{
height:100%;
}
</style>
另外,最后还有一个额外的div结束标记。