实现图片懒加载(及优化相关)

工作之余想要休闲一下(看-美-女-图),但是又觉得单纯休闲不利于自身进步,于是……

大家好,又见面了,我是你们的朋友全栈君。

内容介绍

  工作之余想要休闲一下(看-美-女-图),但是又觉得单纯休闲不利于自身进步,于是 ……

  首先,简单说一下 懒加载 和 预加载 ,两者都能提升用户体验。

1、懒加载

  当客户端首屏不需要展示的图片,可以先不进行图片数据的请求,当图片的结构进入可视区域的时候,让这张图片进行显示监听scroll滚动,当滚动的距离 +首屏的高度 >元素距离浏览器顶端的高度值时,让图片进行显示。

2、预加载

  幻灯片、相册等,可以使用图片预加载,将当前展示图片的前一张和后一张优先下载。初始化的时候获得图片的src之后为每一个元素提前添加图片的地址路径。保证在第二张图片显示的时候已经加载到页面当中.(应用于轮播、相册、幻灯片等图片需要进行切换显示的地方)。

一、效果展示

在这里插入图片描述

? ? ? ? ?

在这里插入图片描述
? ? ? ? ?

图片懒加载演示视频

二、实现代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <title>图片懒加载</title>
    <style> * { 
     margin: 0; padding: 0; } .img-wp { 
     width: 765px; margin: 0 auto; } </style>
</head>

<body>


    <div class="img-wp">
        <!-- 使用data-*属性存放图片路径 -->
        <!-- src 属性可为空,或放小图 -->
        <img src="" data-src="./img/1.jpeg" alt="" width="765" height="574">
        <img src="" data-src="./img/2.jpeg" alt="" width="765" height="574">
        <img src="" data-src="./img/3.jpeg" alt="" width="765" height="574">
        <img src="" data-src="./img/4.jpeg" alt="" width="765" height="574">
        <img src="" data-src="./img/5.jpeg" alt="" width="765" height="574">
        <img src="" data-src="./img/6.jpeg" alt="" width="765" height="574">
    </div>

    <script> ! function(window, document, $, undefined) { 
     // 页面滚动时触发 function lazyScroll() { 
     $('img').each(function(index, item) { 
     let bTop = $(this).offset().top; let scrollHeight = $(':root').scrollTop(); let screenHeight = window.innerHeight; // 滚动区域及可视范围进行判断 if ((scrollHeight + screenHeight) > bTop) { 
     $(this).attr('src', $(this).data('src')) } }) } // 页面加载完成时执行一次 lazyScroll() $(window).on('scroll', lazyScroll) }(window, document, jQuery) </script>
</body>

</html>

三、优化相关

以上代码案例仅作为简单实现,实际使用中可以进行封装和优化,列举几栗:

  • 已经懒加载完成的元素添加指定class类名,防止重复监听
  • 使用防抖函数,控制触发频率
  • 使用getboundingClientRect或IntersectionObserver(性能较好,但是有兼容性问题)
  • jquery.lazyload.js

标签:JavaScript,jQuery,图片懒加载


更多演示案例,查看 案例演示


欢迎评论留言!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125718.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • virsh console 进不去虚拟机_virsh 命令

    virsh console 进不去虚拟机_virsh 命令参考自链接http://www.2cto.com/os/201411/354288.html下的文章,感谢作者,自己整理备份,以备查用。问题描述:       先执行命令virshstartmycentos,启动虚拟机。       当执行命令virshconsolemycentos后出现如下显示:       virshconsolemycentos

    2022年8月12日
    3
  • 《提问的艺术》读后感「建议收藏」

    《提问的艺术》读后感「建议收藏」前言提问前他明明能帮到我却不帮我提问前必知必会的一些事关于搜索引擎提问时找准对象学会停顿组织你的问题清晰的发问低声下气代替不了做自己的家庭作业删除无意义的要求不要把问题标记为紧急即使对你而言的确如此礼貌总是有益的对待无礼提问禁区总结前言众所周知,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,但是怎么清楚的让有经验的人明白你表述的问题,让你获得最

    2022年6月23日
    20
  • Vue学习之过滤器的使用

    Vue学习之过滤器的使用Vue学习之过滤器的使用

    2022年4月23日
    63
  • openwrt安装aliddns使用阿里云ddns[通俗易懂]

    openwrt安装aliddns使用阿里云ddns[通俗易懂]openwrt安装aliddns使用阿里云ddns一些小伙伴安装了openwrt之后发现没法使用阿里云的ddns解析这里告诉你怎么添加aliddns插件需要会一些linux基础命令和ssh分四步安装依赖下载插件上传插件安装插件安装ddns-scripts、luci-app-ddns、openssl-util、wget依赖包使用luciweb界面里面的软件包管理,或者ssh使用opkg安装都一样有的openwrt自带的源地址可能下载很慢或根本无法下载,得换源下载alid

    2022年6月10日
    982
  • word2vec 中的数学原理详解(一)目录和前言

    word2vec 中的数学原理详解(一)目录和前言word2vec是Google于2013年开源推出的一个用于获取wordvector的工具包,它简单、高效,因此引起了很多人的关注。由于word2vec的作者TomasMikolov在两篇相关的论文[3,4]中并没有谈及太多算法细节,因而在一定程度上增加了这个工具包的神秘感。一些按捺不住的人于是选择了通过解剖源代码的方式来一窥究竟,出于好奇,我也成为了他们中的一员。读完代码后,觉得收获颇多,整理成文,给有需要的朋友参考。

    2022年5月16日
    38
  • 使用 Vue + LayUI 做后台管理、RESTful 交互

    使用 Vue + LayUI 做后台管理、RESTful 交互一、前言1、之前使用了React/Angular,使用起来显然是比jQuery好多了,但时隔半年,最近再次深入研究了vue,很惊喜。故以后选择MVC/MVVM框架的话,建议首选vue,主要是其代码结构,清晰简单。2、使用vue+layui了,但layui里边的layui.js模块vue.js冲突,因此放弃使用layui.js,导致很多高级…

    2022年6月25日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号