用 JS 实现图片懒加载,以及如何在 vue 中使用图片懒加载:

50 篇文章 0 订阅
订阅专栏
34 篇文章 2 订阅
订阅专栏
  • 图片懒加载出现的原因 :

有时候一个网页会包含很多的图片,例如淘宝京东这些购物网站,商品图片多只之又多,页面图片多,加载的图片就多。服务器压力就会很大。不仅影响渲染速度还会浪费带宽。比如一个 1M 大小的图片,并发情况下,达到 1000 并发,即同时有 1000 个人访问,就会产生 1个G 的带宽。为了解决以上问题,提高用户体验,就出现了懒加载方式来减轻服务器的压力,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能。

 

  •  懒加载原理 :

一张图片就是一个 <img> 标签,浏览器是否发起请求图片是根据 <img> src 属性,所以实现懒加载的关键就是,在图片没有进入可视区域时,先不给 <img> src 赋值,这样浏览器就不会发送请求了,等到图片进入可视区域再给 src赋值。

  •  dataset :

HTML5 中我们可以使用 data-前缀 设置我们需要的自定义属性,来进行一些数据的存放。 dataset 自定义属性的格式:data-xx;前面的 data- 是固定的,后面的 xx 般为表示与自定义属性相关的字符串。img 标签中的 data-src 属性就属于一种自定义的 dataset 属性

<div id="today" 
  data-food="sushi" 
  data-meal="lunch">
      dinner
</div>

<script>
//当我们想要获取这个属性的时候
var today = document.getElementById('today');  
var typeOfFood = today.dataset.food;
</script>

页面中的 img 元素,如果没有 src 属性,浏览器就不会发出请求去下载图片,只有通过 javascript 设置了图片路径,浏览器才会发送请求。所以懒加载基本的原理就是 dataset 自定义属性取代 src 存储图片的路径,然后在检测到图片进入到可视区域的时候,再将其换为 src

  •  首先将所有图片的 src 换为自定义属性 data-src,这个时候图片是不显示的:

其中 ‘src="./图片懒加载/F1mjpV.gif"’ 为占位符,为了使其效果更明显;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>懒加载</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    li {
      list-style: none;
      height: 600px;
      box-sizing: border-box;
      border: 1px solid black;
    }
    img {
      display: block;
      margin: 100px auto;
    }
  </style>
</head>
<body>
<div id="box">
  <ul>
    <ul>
    <li>
      <img data-src="./图片懒加载/1.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/2.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/3.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/4.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/5.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/6.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/7.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/8.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/9.jpg" src="./图片懒加载/F1mjpV.gif" alt="">
    </li>
    <li>
      <img data-src="./图片懒加载/10.jpg" alt="">
    </li>
  </ul>
</div>
</body>
</html>
  • 判断条件 :

window.innerHeight : 可以获取到这个 窗口的高度 (不包括工具栏和滚动条)。

getBoundingClientRect()方法 : 用来获取页面中某个元素的左、上、右、下分别相对浏览器视窗的位置,返回的是一个矩形对象,包括四个属性,分别是 left 、top、right、bottom。分别表示元素各边与页面上边和左边的距离。

基本的判断就是如果该图片距离窗口上方的位置小于窗口的高度(也就是说该图片已经进入了窗口),那么就将该图片的src 属性赋为 data-src 找那个存的图片路径。然后 全局绑定 scroll 事件,在滚动页面的时候,图片进入到窗口后,500ms 之后才会显示出图片。

<script>
  function imgonload() {
    let img = document.querySelectorAll("img");
    /*console.log(img);*/
    for(let i=0; i<img.length; i++) {
      if(img[i].getBoundingClientRect().top < window.innerHeight) {
        //图片一旦有src就会加载出来,所以图片的路径不会放在src中,而是一个自定义的属性data-src中
        img[i].src = img[i].dataset.src;
      }
    }
  }

  function scollImg(fn) {
    let timer = null;
    let context = this;
    return function () {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(context);
      }, 500)
    }
  }
  window.onload = imgonload;
  window.onscroll = scollImg(imgonload);
</script>

  • 在 vue 中使用图片懒加载

实现方法 ---> (使用 vue 的 vue-lazyload 插件)

  • 安装插件 :
npm install vue-lazyload --save-dev
  • 在入口文件 main.js 中引入并使用 :
import VueLazyload from 'vue-lazyload'

  在这里可以选择 直接使用,或者 添加自定义选项

   直接使用 :

Vue.use(VueLazyload)

  或者添加自定义选项 :

Vue.use(VueLazyLoad,{
	error:'data-src',                 //加载图片出错了,显示的图片
	loading:'data-src'             //加载中,显示的图片(预加载显示的图片)
	attempt:3,                        //尝试加载的图片数量
	preLoad:1.3,                      //预加载的高度比例
	listenEvents:['scroll']           //触发的事件 (监听)   
	})
  • 修改图片显示方式为懒加载(将 :src 属性直接改为 v-lazy ):
<a href="javascript:;"><img v-lazy="'/static/img/' + item.productImage"></a>

<!-- 原: --> <img :src="emptyGif">
<!-- 现: --> <img v-lazy="emptyGif">

 

vue实现图片懒加载的方法分析
10-15
主要介绍了vue实现图片懒加载的方法,结合实例形式分析了vue.js图片懒加载插件安装、使用方法与相关操作注意事项,需要的朋友可以参考下
Vue实现一个图片懒加载插件
12-12
今天就用vue实现一个图片懒加载的插件。 这篇博客采用“三步走”战略——Vue.use()、Vue.direction、Vue图片懒加载插件实现,逐步实现一个Vue图片懒加载插件。 Vue.use() 就像开发jQuery插件要用$.fn.extent()...
Vue+原生js实现图片懒加载
wei_dan1129的博客
04-23 304
一张图片就是一个标签,而图片的来源主要是src属性。浏览器是否发起请求就是根据是否有src属性决定的。 那么我们就要对标签的src属性下手了,在没进入可视区域的时候,我们先不给这个标签赋src属性,这样浏览器就不会发送请求了。 总结:我们知道了从标签下手,那么更重要的就是可视区域的判断了 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="v
vue-lazy(自定义图片懒加载)
最新发布
Kylincsg的博客
08-19 1087
在npm官网库试了好多,要么就是不生效没什么用的,要么就是没文档不知道能不能用的,上次在npm找了一个,现在找不到了,被删库了,所以,还是自己简单写一个救救急吧,废话不多说,直接看代码!!!
Vue项目实现图片懒加载
热门推荐
毛毛虫博客
05-07 3万+
此文章已永久迁移至个人博客网站,为不影响使用,请打开如下网址访问 https://www.iiter.cn/blogs/28
Vue图片懒加载
小绵杨
12-11 3890
1、问题 在vue项目,如果图片是从服务器端加载到页面上,图片较大的时候,就会存在一部分一部分加载的情况,会显示非常卡顿,影响体验。 2、实现 (1)、图片懒加载 首先将图片的src链接设为一张我们已经准备好的图片(比如类似加载的图片),并将其真正的图片地址存储在img标签的自定义属性。当js监听到该图片元素进入可视窗口时,即将自定义属性的地址存储到src属性,达到懒加载的效果。这样就可以缓解服务器压力,并且提高用户体验。 (2)、安装vue-lazyload npm i vue-lazyload
浅谈vue使用图片懒加载vue-lazyload插件详细指南
11-27
Vue.js应用,为了优化用户体验,特别是在处理大量图片或者网络环境较差时,可以采用图片懒加载技术。本文将详细讲解如何使用`vue-lazyload`插件来实现这一功能。 `vue-lazyload`是一个专门针对Vue.js设计的图片...
vue指令实现页面图片懒加载鼠标滚动图片开始加载
12-01
Vue 指令是Vue.js框架提供的一种自定义行为方式,通过创建自定义指令,我们可以实现图片懒加载功能,即当图片进入浏览器视口时才开始加载,这样可以有效地节省带宽,提高页面的加载速度。 图片懒加载的核心原理在于...
vue图片懒加载
Locker的博客
07-01 896
图片懒加载其实就是在用户还未浏览到某些位置的时候就暂时不加载图片信息,以此节省带宽,减轻服务器压力以及优化用户体验,因为图片不是一次性全部加载完,故网页的加载速度会提升很多(前提是数据量比较大)。 图片懒加载实际上就是使用html5的自定义属性data-xx,将图片src路径存储在该属性,需要加载的时候再将数据替换到src路径。 在vue项目有一个依赖可以轻松实现图片懒加载vue-lazyload,Gitee仓库链接在这 1、安装 关于这个依赖在vue项目使用,首先自然是安装,我使用脚手
vue使用图片懒加载
weixin_45797900的博客
05-19 442
直接npm下载,挂在到vue使用即可。 npm install vue-lazyload --save-dev //安装懒加载包 入口文件main引入 import VueLazyload from 'vue-lazyload' Vue.use(VueLazyload) 可配置自定义属性 Vue.use(VueLazyload, {preLoad: 1.3,error: 'dist/error.png',loading: 'dist/loading.gif',attempt: 1})
layzr.js新版使用方法
weixin_30765475的博客
04-20 129
转载请注明出处:http://www.cnblogs.com/fiter/p/5413919.html 前言 今天研究这个JS库,本人新手,将官方的js代码下载下来后始终无法正常使用,经过多番尝试,终于找到一个可以用的新版代码,在这里分享https://github.com/xibudu/layzr 目录 layzr介绍 layzr的基本使用 Layzr的注意事项 ...
Vue 2.0 使用图片懒加载插件
denl0918的博客
01-10 6342
1、下载插件 2、导入到main.js 3、安装插件 4、template 图片数值v-lazy属性存图片链接
VUE图片懒加载
qq_47443027的博客
08-06 451
什么叫懒加载 通俗讲 : 懒加载就是延时加载,即当需要用到的时候再去加载。 那什么叫做需要用到的时候? 比如一个图片在没有出现在可视区域内,就已经加载当页面里了, 但只有滚动页面下方式才能看见, 则可以认为这个图片加载的"过早"了。 懒加载的优点 可以减少首页首次加载的数量,减少服务器的压力 当网络请求比较慢的时候, 提前给这张图片添加一个像素比较低的占位图片,不至于堆叠在一块,或显示大片空白,让用户体验更好一点。 为什么使用懒加载 可以想象一个网页打开有成百上千的图片需要加载,页面会变得非常
vue 图片的懒加载
sq-20184的博客
05-03 541
面试的时候一直被问懒加载,预加载的问题,回答的比较含糊。利用假期做了个vue 的懒加载,具体如下。 首先你的安装 npm install vue-lazyload --save-dev 或者yarn add vue-lazyload --save-dev 然后在main.js 里面引入 main.js import Vue from 'vue' import App from './App....
Vue三步打造图片懒加载插件:Vue.use()与direction指令应用
最后,文章可能还会涉及如何在Vue组件应用这个插件,包括在模板使用懒加载指令,以及如何处理图片的预加载策略,比如预先加载一部分图片,确保页面加载时至少有一部分图片可见。 总结来说,这篇文章将指导读者...
写文章

热门文章

  • vue 项目中分别使用 vue-pdf 插件和内嵌 iframe 实现 PDF 文件预览,缩放,旋转,下载,保存等功能 ? 5488
  • 修改 element ui 中跑马灯组件为三列卡片轮播 。 5428
  • 如何实现在 Vue 中嵌入代码编辑器 ? 4743
  • 对于使用 vue-cli3 创建的项目中,eslint 配置问题的解决: 4151
  • 对于 mysql 数据库,查看和修改其用户名和密码的步骤: 4051

分类专栏

  • 前端学习资源 1篇
  • typescript,vue3.x 3篇
  • vue2.x ,vue_cli 34篇
  • node,express,npm 11篇
  • github / git,svn,webpack 11篇
  • html,css,html5,css3 13篇
  • javascript,es6 50篇
  • http, https,ajax,axios 13篇
  • js-data structures,algorithms 10篇
  • react 4篇
  • Plug-ins and class libraries 18篇
  • eslint,regexp,json 4篇
  • mysql,markdown 5篇

最新评论

  • vue2.x 中全局和按需引入 element-ui 组件库 ?

    美酒没故事°: 弄完了,但并不是在使用的地方按需加载啊,而是在项目加载的时候把elementUI就加载了

  • 修改 element ui 中跑马灯组件为三列卡片轮播 。

    乐乐码代码: 可以改成六列吗?

  • VUE 项目中富文本编辑器的使用 (vue-quill-editor)?

    点滴_53353950: 谢谢分享表情包表情包表情包

  • vue2.x 中全局和按需引入 element-ui 组件库 ?

    coder__Song: 文章非常好,支持一下作者

  • xxtea 算法的 js 加密处理类,包含 UtfParser 和 Base64 类 ?

    Sir_Manley: ES6这个怎么使用

最新文章

  • 日常知识总结:
  • 前端 B 站学习资源整合
  • vueCli2.0 和 vueCli3.0 项目中配置多环境运行打包 ?
2021年34篇
2020年113篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司蚌埠市网站优化哪家好网站优化中存在的错误柳南网站优化泰安优化网站哪家好随州外包网站优化价格坪山网站建设泰安百度网站优化邯郸百度快照网站优化孝感本地网站优化公司福州市网站seo优化哪家强智能公司网站关键词优化网站的内容优化思明区网站排名优化郑州移动网站优化公司口碑好安庆企业网站优化哪家专业江苏网站seo优化工作室物流网站如何优化首页南山网站优化规划揭阳手机网站优化信息平台网站优化扬州网站优化策划乐清外贸网站优化网站建设推广优化网站打开慢怎么优化湖州网站优化企业优化网站性能的步骤哈尔滨seo优化网站源码武穴网站排名优化公司网站优化说明沧州企业网站排名优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化