文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

jquery lazyload图片延时加载在可见区域却不显示

admin

admin

2024-04-02 17:21

关注

之前老师网站一直存在一个问题,就是访问首页时文章列表的缩略图一开始不会正常显示,原因在于模板开发者使用了基于jquery.lazyload.js的延时加载技术,但是在使用过程中配置出了问题,导致图片明明在可见区域却一直不显示,直到滚动栏往下滚动很多才会加载出来,所以潘老师就研究了下车,最终发现问题所在,并成功解决。

由于原始js是压缩版,还要格式化后调试才能看出在哪一行,通过浏览器F12疯狂调试,终于找到了延时加载的代码所在位置,F12调试图:

找到代码图:

后来经过一番查找,发现有一个属性对本问题影响很大,就是failure_limit 属性,将代码改为如下问题解决:

$("img").lazyload({
       //渐现,show(直接显示),fadeIn(淡入),slideDown(下拉)
       effect : "fadeIn", 
       //预加载,在图片距离屏幕180px时提前载入
       threshold : 180,   
       failure_limit:50 
 });

那failure_limit 到底起了什么作用呢?

由于Lazy Load 有一个循环查找 img 的机制,根据 HTML 文档的布局从上往下查找,当找到第一个并未显示加载的 img时,就会停止往下查找。(其实就是对 $(“img”) 这个对象(组)进行顺序查找) 。

而现在网站设计时,都会用到大量的定位样式,如: float 和 position , 这样在浏览器呈现的布局效果和 HTML 文档中的 DOM 顺序有很大差异,这样就会存在一种情况,某 img 标签已出现在屏幕上,但它却无法显示! 因为它在 HTML 文档中的实际位置排在了那些还没有显示的img 标签后面, 这样会导致显示在屏幕上的这个img标签无法加载相应的图片。

当Lazy Load 在找到第一个未显示的标签时,查找已经被终止了, 并没有继续往下遍历,这样就出现了我遇到的情况了,那解决办法也非常简单的,我们可以在原来的代码上直接把failure_limit属性加上,并把值设置的比较大,比如我的就需要设置到50,这样 Lazy Load 会查找到第50个未显示的标签处。当在图片多且布局复杂的页面时, failure_limit 的作用就很大了,尤其是当你的网站布局很”变态”时,那可以把该值调得更高基本就可以解决问题了。


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     676人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     305人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     262人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     366人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     174人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯