我有一个很长的页面,可在用户滚动浏览时动态加载图像。
但是,如果用户快速滚动离开页面的某个部分,我不希望图像继续加载到页面的该部分视图之外。
除了图像加载外,页面上还同时发生了许多其他请求,因此在scroll事件上触发钝化window.stop()是不可接受的。
我尝试删除并清除不再可见的图像的img src属性,但是,由于请求已经启动,因此图像会继续加载。
请记住,当用户短暂滚动经过页面的那部分时,图像src已被填充。但是一旦过去,如果不使用window.stop(),就无法停止加载该图像。清除src无效。(Chrome和FF)
正如nrabinowitz所提到的,您正在尝试做的是错误的方法。您不能只是“取消”图像的加载过程(将src属性设置为空字符串不是一个好主意)。实际上,即使这样做,也只会使情况变得更糟,因为服务器将不断发送会被取消的数据,从而增加了负载率并降低了速度。另外,请考虑以下事项:
src
通常,计算机问题仅仅是设计问题。
编辑
这是一个主意:
您的页面应显示DIV具有预期图像大小的宽度和高度的容器(使用CSS设置样式)。在每个内部DIV,添加一个链接。例如 :
DIV
<div class="img-wrapper thumbnail">
href="http://www.domain.com/path/to/image">Loading…
添加此Javascript(未经测试,想法是自我描述的)
$(function() {
var imgStack; var loadTimeout;
$(window).scroll(function() { imgStack = null; if (loadTimeout) clearTimeout(loadTimeout);
loadTimeout = setTimeout(function() {
// get all links visible in the view port // should be an array or jQuery object imgStack = ... loadNextImage();
}, 200); // 200 ms delay });
function loadNextImage() { if (imgStack && imgStack.length) { var nextLink = $(imgStack.pop()); // get next image element
$('<img />').attr('src', nextLink.attr('href')) .appendTo(nextLink.parent()) .load(function() { loadNextImage(); }); // remove link from container (so we don't precess it twice) nextLink.remove();
} };
});