Jquery图片懒加载和预加载

懒加载

1.什么是懒加载

Lazy Load也叫懒加载,延迟加载,顾名思义,就是在图片未到达可视区域时,不加载图片,我们常常在很多的优秀网站上看到类似的例子,例如迅雷、土豆、优酷等,由于一个网页的图片非常多,一次性加载增加服务器压力,而且用户未必会拉到底部,浪费用户流量,Lazy Load采用按需加载,更快的加载速度从而达到优化网页的目的。

懒加载也叫延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式

用户滚动到它们之前,可视区域外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更快。

在某些情况下,它还可以帮助减少服务器负载。常适用图片很多,页面很长的电商网站场景中。

2.为什么要用懒加载

  • 能提升用户的体验,不妨设想下,用户打开像手机淘宝长页面的时候,如果页面上所有的图片都需要加载,由于图片数目较大,等待时间很长,用户难免会心生抱怨,这就严重影响用户体验。
  • 减少无效资源的加载,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担。
  • 防止并发加载的资源过多会阻塞js的加载,影响网站的正常使用。

3.懒加载的原理

首先将页面上的图片的 src 属性设为空字符串,而图片的真实路径则设置在data-original属性中。

当页面滚动的时候需要去监听scroll事件,在scroll事件的回调中,判断我们的懒加载的图片是否进入可视区域,如果图片在可视区内将图片的 src 属性设置为data-original 的值,这样就可以实现延迟加载。

4.案例

需要的HTML

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>#image {margin: 0 auto;padding: 10px;width: 80%;border: 1px salmon solid;/*开启弹性布局*/display: flex;/*wrap:换行,第一行在上方。*/flex-wrap: wrap;/*或者使用 两端对齐,项目之间的间隔都相等。*/justify-content: space-between;}.album {width: 150px;height: 150px;box-shadow: 1px 1px 5px silver;border-radius: 10px;animation: key1 3s infinite forwards alternate;}@keyframes key1 {0% {}20% {transform:translate(0px ,-13px);}40% {transform:translate(0px ,15px);}100% {transform:translate(0px ,0px);}}.album:hover {animation: key 0.5s;}@keyframes key {0% {}100% {transform: scale(1.2);}}.p1 {animation: key 4s infinite forwards alternate;font-size: 18;font-weight: bold;color: salmon;box-shadow: 1px 1px 5px silver;border-radius: 10px;width: 150px;border: 1px salmon solid;margin-top: 10px;margin-bottom: 15px;}.div1 {margin: 15px;}.button1{width: 100px;height: 40px;background-color: #FA8072;border: 1px sandybrown solid;box-shadow: 1px 1px 5px silver;border-radius: 10px;}.button1:hover{transform: scale(1.2);transition:all 0.5s ease-in-out ;background-color: antiquewhite;cursor: pointer;}* {margin: 0;padding: 0;}.bg {background-color: #f4f5f9;width: 100px;border: 1px solid darkgray;display: none;position: absolute;box-shadow: 2px 2px 8px 1px rgba(0, 0, 0, .2);z-index: 1000;}.bg ul {list-style-type: none;text-align: center;line-height: 40px;}.bg li:hover {cursor: pointer;background: #eee;color: #CC1A1A;}</style></head><body><div align="center" id="container"><div class="bg" id="bg"><ul><li>进入相册</li><li>删 除</li><li>修 改</li><li>****</li></ul></div><h1 align="center">相册</h1><div id="image" align="center"><div class="div1"><p class="p1">title1</p><img data-original="./a.jpg" class='album lazy' title="描述" /></div><div class="div1"><p class='p1'>title2</p><img data-original="./a.jpg" class='album lazy' title="描述1" /></div><div class="div1"><p class='p1'>title3</p><img data-original="./a.jpg" class='album lazy' title="描述2" /></div><div class="div1"><p class='p1'>title4</p><img data-original="./a.jpg" class='album lazy' title="描述3" /></div><div class="div1"><p class='p1'>title5</p><img data-original="./a.jpg" class='album lazy' title="描述4" /></div><div class="div1"><p class='p1'>title6</p><img data-original="./a.jpg" class='album lazy' title="描述5" /></div><div class="div1"><p class='p1'>title7</p><img data-original="./a.jpg" class='album lazy' title="描述6" /></div><div class="div1"><p class="p1">title8</p><img data-original="./a.jpg" class='album lazy' title="描述7" /></div><div class="div1"><p class='p1'>title9</p><img data-original="./a.jpg" class='album lazy' title="描述8" /></div></div><button class="button1" id="button1">添加新相册</button></div></body>
</html>

需要的js

注意:你必须给图片设置一个height和width,或者在CSS中定义,否则可能会影响到图片的显示

需要的jquery-3.4.1.js

链接:https://pan.baidu.com/s/1WwJNXa9-5csYVxG8vyghmA
提取码:1234

需要的 lazyload.js

链接:https://pan.baidu.com/s/1_118DY8mIDUhJs8dsq5JGg
提取码:1234

实现懒加载js代码

将图片的真实路径放在img的data-original属性上。给img标签增加一个自定义的类名如:lazyload,方便js调用。

<img class="lazy" alt="" width="1000" height="60" data-original="//images.h-ui.net/www/AD-1000x60.gif" />
             <script src="./jquery-3.4.1.js"></script><!-- 图片的延迟加载 --><script src="./lazyload.js"></script><script>$(function(){// 启动  延迟加载$("img.lazy").lazyload({placeholder : "./1.gif", //用图片提前占位// placeholder,值为某一图片路径.此图片用来占据将要加载的图片的位置,待图片加载时,占位图则会隐藏effect: "fadeIn", // 载入使用何种效果// effect(特效),值有show(直接显示),fadeIn(淡入),slideDown(下拉)等,常用fadeInthreshold: 200, // 提前开始加载// threshold,值为数字,代表页面高度.如设置为200,表示滚动条在离目标位置还有200的高度时就开始加载图片,可以做到不让用户察觉container: $("#container"),  // 对某容器中的图片实现效果  就是最外层的div 设置id 为 container就行了 // container,值为某容器.lazyload默认在拉动浏览器滚动条时生效,这个参数可以让你在拉动某DIV的滚动条时依次加载其中的图片failurelimit : 10 // 图片排序混乱时// failurelimit,值为数字.lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况,failurelimit意在加载N张可见区域外的图片,以避免出现这个问题.}).removeClass("lazy");})</script>

这里有 如果使用 ajax 请求 来评价的图片 那么 需要将上面的代码 放入 ajax里才能 有效

还有就是 首页会有多个ajax 请求,所以要在每次ajax请求接口,渲染模板后都重调用 延迟加载

为了防止重复渲染 使用 .removeClass(“lazy”); 将 指定的 lazy 属性删除 这样就只会 渲染一次

当然 如果 你在其他的地方 还需要 此lazy 属性 那么就不要删除此属性

预加载

1.什么是预加载

资源预加载是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到。

预加载简单来说就是将所有所需的资源提前请求加载到本地,这样后面在需要用到时就直接从缓存取资源

2.为什么要用预加载

在网页全部加载之前,对一些主要内容进行加载,以提供给用户更好的体验,减少等待的时间。

否则,如果一个页面的内容过于庞大, 页面加载是从上到下加载的 此刻你翻到后面 那么页面图片 都是白色的 我们可以使用预加载提前加载好这些图片

3.案例

需要的html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>#image {margin: 0 auto;padding: 10px;width: 80%;border: 1px salmon solid;/*开启弹性布局*/display: flex;/*wrap:换行,第一行在上方。*/flex-wrap: wrap;/*或者使用 两端对齐,项目之间的间隔都相等。*/justify-content: space-between;}.album {width: 150px;height: 150px;box-shadow: 1px 1px 5px silver;border-radius: 10px;animation: key1 3s infinite forwards alternate;}@keyframes key1 {0% {}20% {transform: translate(0px, -13px);}40% {transform: translate(0px, 15px);}100% {transform: translate(0px, 0px);}}.album:hover {animation: key 0.5s;}@keyframes key {0% {}100% {transform: scale(1.2);}}.p1 {animation: key 4s infinite forwards alternate;font-size: 18;font-weight: bold;color: salmon;box-shadow: 1px 1px 5px silver;border-radius: 10px;width: 150px;border: 1px salmon solid;margin-top: 10px;margin-bottom: 15px;}.div1 {margin: 15px;}.button1 {width: 100px;height: 40px;background-color: #FA8072;border: 1px sandybrown solid;box-shadow: 1px 1px 5px silver;border-radius: 10px;}.button1:hover {transform: scale(1.2);transition: all 0.5s ease-in-out;background-color: antiquewhite;cursor: pointer;}* {margin: 0;padding: 0;}.bg {background-color: #f4f5f9;width: 100px;border: 1px solid darkgray;display: none;position: absolute;box-shadow: 2px 2px 8px 1px rgba(0, 0, 0, .2);z-index: 1000;}.bg ul {list-style-type: none;text-align: center;line-height: 40px;}.bg li:hover {cursor: pointer;background: #eee;color: #CC1A1A;}</style></head><body><div align="center" id="container"><div class="bg" id="bg"><ul><li>进入相册</li><li>删 除</li><li>修 改</li><li>****</li></ul></div><h1 align="center">相册</h1><div id="image" align="center"><div class="div1"><p class="p1">title1</p><img src="" class='album ' title="描述" /></div><div class="div1"><p class='p1'>title2</p><img src="" class='album ' title="描述1" /></div><div class="div1"><p class='p1'>title3</p><img src="" class='album ' title="描述2" /></div><div class="div1"><p class='p1'>title4</p><img src="" class='album ' title="描述3" /></div><div class="div1"><p class='p1'>title5</p><img src="" class='album ' title="描述4" /></div><div class="div1"><p class='p1'>title6</p><img src="" class='album ' title="描述5" /></div><div class="div1"><p class='p1'>title7</p><img src="" class='album ' title="描述6" /></div><div class="div1"><p class="p1">title8</p><img src="" class='album ' title="描述7" /></div><div class="div1"><p class='p1'>title9</p><img src="" class='album ' title="描述8" /></div></div><button class="button1" id="button1">添加新相册</button></div></body>
</html>

需要的js

需要的jquery-3.4.1.js

链接:https://pan.baidu.com/s/1WwJNXa9-5csYVxG8vyghmA
提取码:1234

yujiaz.js

链接:https://pan.baidu.com/s/15M1TTtXemMCNtjm2zSeNGA
提取码:1234

实现预加载js代码

     <script src="./jquery-3.4.1.js"></script><!-- 图片的延迟加载 --><script src="./yujiaz.js"></script><script>var imgs = ["./1.gif", "./a.jpg"];$.preload(imgs, { // imgs: 图片数组或字符串 ['1.jgp', '2.jpg'] 或者 '1.jpg'order: 'ordered', // 默认无序加载each: function(count) {// 单个图片加载完成},all: function() {// 所有图片加载完成console.log("所有图片加载完成")//方式1// for (var i = 0; i < imgs.length; i++) {//   var str = "<div class='div1'> \//            <p class='p1'> Title" +i + "</p> \//             <img src=" + imgs[i] +" class='album ' width='100' height='100' /> \//          </div>"//    $("#image").append(str)// }//方式1//index是下标 , element是对象$(".album").each(function(index, element) {$(element).attr("src", imgs[0])})}});</script>

自己感受下 效果就能发现 所有的 图片是同时加载好的 而不是一张一张的加载

懒加载与预加载的对比

懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。

预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。

区别:

两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。

懒加载意义:

懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。

预加载意义:

预加载可以说是牺牲服务器前端性能,换取更好的用户体验,这样可以使用户的操作得到最快的反映。

什么时候使用懒加载 什么时候使用预加载呢?

当页面图片特别多的时候 而且页面也特别长 比如京东 淘宝 这些 主页 图片少说都几千张 如果 你全部都加载完 那么等的花都谢了

这时候可以使用懒加载来 只加载可视图 或者靠近可视区的图片 这样就大大的加快了 访问的速度

当页面图片不是特别多 的时候 为了用户的体验效果 我们可以使用预加载 比如 从淘宝进入到店铺里看某件商品介绍的时候 切换的过程中就把 该介绍页面的所有图片都加载完成了 进去后无需等待

总结: 当前页面图片特别多的话 就使用懒加载 图片不是很多的话就使用预加载

点赞 -收藏-关注-便于以后复习和收到最新内容 有其他问题在评论区讨论-或者私信我-收到会在第一时间回复 如有侵权,请私信联系我 感谢,配合,希望我的努力对你有帮助^_^

Jquery图片懒加载和预加载相关推荐

  1. jquery 当页面图片加载之后_图片的懒加载和预加载

    一.懒加载 [1.1]什么是懒加载? 懒加载也就是延迟加载,指的是在长网页中延迟加载图像,是一种很好优化网页性能的方式.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1 ...

  2. javascript图片懒加载与预加载的分析

    懒加载与预加载的基本概念. 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染. 两种技 ...

  3. 基于jQuery的图片异步加载和预加载实例

    如今的网页中有很多图片,比如相册列表,那么如果一次性读取图片将会瞬间加重服务器的负担,所以我们用jQuery来实现图片的异步加载和预加载功能,这样在页面的可视范围内才会加载图片,当拖动页面至可视界面时 ...

  4. img加载本地图片_图片加载技术-懒加载和预加载

    懒加载也就是延迟加载. 具体表现为: 当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张占位图的路径,这样就只需请求一次,只有当图片出现在浏览器的可视区域内时,才设置图片正真的路 ...

  5. 图片的懒加载和预加载?

    一.写在前面 图片的懒加载和图片的预加载都是前端性能优化的一个方案,当然可能存在不同的应用场景,下面我们将总结一下这两个方案. 二.图片懒加载 图片的懒加载是什么? 图片的懒加载指的是在长网页中延迟加 ...

  6. 页面优化之懒加载与预加载

    1.前言 PC端网速较快,现在普通都是百兆宽带,那么折算一下就是10M/s的下载速度,基本上资源如果在10M以内的话加载还是比较快的. 但是移动端就不行了.移动端需要消耗巨额的流量,所以尽量减少移动端 ...

  7. css 同步加载,同步加载,异步加载,懒加载,预加载

    同步加载 默认的就是同步加载 同步加载: 同步模式又称阻塞模式,会阻止浏览器的后续处理,停止了后续的文件的解析,执行,如图像的渲染.流览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作, ...

  8. 懒加载和预加载的区别

    概念: 懒加载:懒加载也叫延迟加载,JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片. 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染. 区别: 两者的行为是相反的,预加载是 ...

  9. jQuery图片懒加载示例(滚动函数再加载)

    图片懒加载可以极大的减轻服务器请求的负担,如果没有做这样的操作,一个页面很多图片同时请求,就会渲染慢,影响用户体验! 原理其实很简单,就是滚动条拉下来显示的时候再加载显示出真实的图片,在不显示的区域的 ...

最新文章

  1. matlab最小分类错误全局二值化算法
  2. 上传图片,多图上传,预览功能,js原生无依赖
  3. 国防科大 linux教程,国防科大《嵌入式系统》肖侬视频教程
  4. css二级菜单会然下面遮住_JavaScript实现下拉二级菜单详解
  5. C#的二进制序列化组件MessagePack介绍
  6. Linux网站访问的电脑占CPU,详解Linux如何查看当前占用CPU或内存最多的几个进程...
  7. linux virtualhost不能正常运行,造成网站无法正常运行的4个原因!
  8. git基本概念与核心命令_Git:了解核心版本控制概念的初学者指南
  9. Learn Python 014: Funtions
  10. AMESim找图形平衡点的方法
  11. 01-HTML基础与进阶-day4-录像250
  12. VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
  13. 基于Java+SpringBoot+Thymeleaf+Mysql餐厅座位预约预订网站系统设计与实现
  14. Java中亦或运算符
  15. OpenCV4 快速入门 (学习笔记 全)
  16. Emotion Expression With Fact Transfer for Video Description基于事实传递的视频描述情感表达
  17. 97-ICMP 协议(端口不可达)
  18. windows 命令行切换目录
  19. 没基础不用怕,零基础无需任何技术学重装电脑系统
  20. 最近学习数学的一些感受(一家之言,仅供一笑)。

热门文章

  1. java打怪游戏_HTML5存储(带一个粗糙的打怪小游戏案例)
  2. jdk和Eclipse的关系
  3. 腾讯面试官分享面试经验,如何考察面试者技术及个人综合素质,给正在面试的你一点建议
  4. 【opencv图像处理】--4. 低、高通滤波,卷积和各种算子
  5. 学校的地下网站(学校的地下网站1080P高清)
  6. cesium 模型、航迹(官方网站代码合并)
  7. 进程间通信的方式及其特点
  8. 读《零成本创业》-黄永宏 (2)
  9. Visdom可视化学习笔记(一):通过visdom画曲线和显示图片总结
  10. 用js方法实现随机颜色tag标签