Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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 使用jQuery延迟图像加载_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 使用jQuery延迟图像加载

Javascript 使用jQuery延迟图像加载,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个页面有几个画廊,包括手风琴和幻灯片。问题是页面加载需要花费很长时间。有没有一种方法可以将图像包装在一段代码中,或者对其应用一个类来强制其仅在加载所有其他内容后加载?当然可以。将img src属性替换为“#”,并添加自定义属性,如下所示: <img src="#" data-delayedsrc="/img/myimage.png" /> $('img').each(function(){ $(this).attr('src', $(this).data('delayed

我有一个页面有几个画廊,包括手风琴和幻灯片。问题是页面加载需要花费很长时间。有没有一种方法可以将图像包装在一段代码中,或者对其应用一个类来强制其仅在加载所有其他内容后加载?

当然可以。将img src属性替换为“#”,并添加自定义属性,如下所示:

<img src="#" data-delayedsrc="/img/myimage.png" />
$('img').each(function(){
  $(this).attr('src', $(this).data('delayedsrc'));
});

在HTML中只保留一个图像,这样查看器就可以开始使用它,然后使用jQuery将其余的图像注入到HTML中

$(document).ready(function() {
    //load rest of the images
});
您也可以使用事件加载器和AJAX或“随动加载”,只要构建一个简单的回调函数(如果它是自动旋转库或单击加载)。

如果您使用jQuery(我假设您是这样标记的),请查看。它会延迟加载视口外的图像,直到用户滚动到它们


2015年更新:该插件曾一度中断,但现在又能正常工作。最后一条评论也是这么说的,但我几乎错过了,因为它隐藏在折叠的评论中

延迟加载图像(和iFrame)的简单方法是使用纯JS、jQuery.data()和自定义HTML5 data-*属性的组合。图像的src最初可以指向正在加载的GIF。data-*属性包含最终要加载的图像的URL路径。纯JS设置一个延迟(在下面的示例中为3000毫秒),然后执行jQuery.data(),将映像的src设置为预期映像

下面的示例使用class=“load delay”在每个图像上执行

现场示例

代码

JS和jQuery:

$(document).ready(function () {
  setTimeout(function () {
    $('.load-delay').each(function () {
      var imagex = $(this);
      var imgOriginal = imagex.data('original');
      $(imagex).attr('src', imgOriginal);
    });
  }, 3000);
});
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <meta charset="utf-8" />

</head>
<body>
  <h1>Loading-Delayed Image</h1>
  <img class="load-delay" src="http://i.imgur.com/7ZMlu3C.gif" data-original="http://oi42.tinypic.com/9sqmaf.jpg" />
</body>
</html>
HTML和jQuery库:

$(document).ready(function () {
  setTimeout(function () {
    $('.load-delay').each(function () {
      var imagex = $(this);
      var imgOriginal = imagex.data('original');
      $(imagex).attr('src', imgOriginal);
    });
  }, 3000);
});
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <meta charset="utf-8" />

</head>
<body>
  <h1>Loading-Delayed Image</h1>
  <img class="load-delay" src="http://i.imgur.com/7ZMlu3C.gif" data-original="http://oi42.tinypic.com/9sqmaf.jpg" />
</body>
</html>

加载延迟图像

它是否会显示仅在视口内模糊的图像?测试并发现:-)这是一个非常易于使用的插件。不幸的是,该插件不再受支持-(来自网站)“延迟加载当前不可用。它不能像预期的那样与最新的浏览器一起工作。我目前没有时间自己更新代码。补丁总是受欢迎的。如果您找到了解决方案,只需fork并发送pull请求。谢谢“@DCD、@Erik、@Mark、@David——有人知道有什么替代懒加载的方法可以真正工作吗?现在这个库的更新版本可以在当前浏览器上工作。狡猾,这可能正是我需要的。为了让IE满意,你可能需要将它设置为blank.gif而不是#,但它应该可以工作。你可以使用HTML数据属性inst这是最快的方法吗?我在400个缩略图上做这件事,浏览器有点困难。如果只选择带有delayedsrc属性的imag标记,这样就不会不必要地循环所有图像元素了,这会是一个小小的改进吗?例如:$('img[delayedsrc]')。每个(function(){都能在没有任何“延迟加载”的情况下完成这项任务“插件或类似插件,非常适合没有滚动的单页网站,可以说,所有交互都发生在折叠上方。非常感谢!