目的: 图片预加载能够使得用户在浏览后续页面的时候,不会出现图片加载一半导致浏览不流畅的情况。

场景:在开发的过程中,我们经常会遇到这样的设计需求,当鼠标hover上去的时候,更改菜单的背景。如果没有进行图片预加载的话,会出现闪烁。那么拥有1px的眼睛的设计师们不会放过你的。为什么会出现这张情况?因为hover的时候,图片才会去加载。那么我们现在来解决这个问题。
首先我们要知道一点:如果图片在使用之前就已经请求过了,那么再次使用的时候,就不会再去请求(ps:图片路径一样)。下面讲实现方式:

一、方法一

项目打开的时候要对图片进行预加载,在App.vue里面的beforeCreate添加预加载程序

App.vue

beforeCreate(){let count = 0;let imgs = [//用require的方式添加图片地址,直接添加图片地址的话,在build打包之后会查找不到图片,因为打包之后的图片名称会有一个加密的字符串require('xxx')]for (let img of imgs) {let image = new Image();image.onload = () => {count++;};image.src = img;}
}

二、方法二

创建两个文件名称分别为imgPreloader.js以及imgPreloaderList.js,前者用于导出图片加载的异步方法imgPreloader,后者用于存放图片列表
然后在main.js里面,Vue对象创建之前,必须先把图片全部加载完才能创建Vue对象并且挂载到#app上

  1. imgPreloaderList.js
export default [require('相对图片地址1'),require('相对图片地址2'),...
];
  1. imgPreloader.js
const imgPreloader = url => {return new Promise((resolve, reject) => {let image = new Image();image.onload = () => {resolve();};image.onerror = () => {reject();};image.src = url;});
};
export const imgsPreloader = imgs => {let promiseArr = [];imgs.forEach(element => {promiseArr.push(imgPreloader(element));});return Promise.all(promiseArr);
};
  1. main.js
// 导入图片预加载方法以及图片列表
import { imgsPreloader } from './config/imgPreloader.js';
import imgPreloaderList from './config/imgPreloaderList.js';(async () => {await imgsPreloader(imgPreloaderList);//关闭加载弹框document.querySelector('.loading').style.display = 'none';new Vue({router,store,render: h => h(App)}).$mount('#app');
})();
  1. 加载弹框

main.js提到加载弹框,那么这个弹框要加在哪里呢?答案是index.html

<style>/**加载弹框的样式    */
</style>
<body><div class="loading"></div>
</body>

三、方法三

使用雪碧图:把hover的图片和原状态图片放一张图片处理(css sprites)。 用position来定位hover后的图片位置。


部分参考:https://blog.csdn.net/qq_34551390/article/details/100998562

vue实现图片预加载的几种方式相关推荐

  1. 实现图片预加载的几种方式

    感觉自己好久没有写博客了,可能自己变懒了.不知道为什么最近有点迷茫,不知道是该去学一下新东西还是该去看一下具有深度的东西.新的技术需要关注,但是我要去研究一下jquery的源码,这个东西很早就想去看, ...

  2. 图片预加载的几种方式

    在开发的过程,我们经常会遇到这样的要求,当鼠标hover上去的时候,更改菜单的背景.如果没有进行图片预加载的话,会出现闪烁.那么拥有1px的眼睛的设计师们不会放过你的.为什么会出现这张情况?因为hov ...

  3. vue实现图片预加载实操

    业务场景是这样的:在页面里有一个提醒文案,提醒文案里有个按钮,点击按钮会弹出示例弹窗,弹窗里上面有标题,中间一个比较大的图片,27kb:下面有个按钮.在苹果手机使用微信打开时,上面的标题和下面的按钮都 ...

  4. 图片预加载的三种方法

    转载: 图片预加载的三个方法 - 浅夏初晴 - 博客园利用CSS.JavaScript及Ajax实现图片预加载的三大方法 预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利 ...

  5. vue 脚手架 图片预加载

    $('.back-img').onload =function(){var img =new Image(); img.src = '../assets/dt-bj.png'; } 该组件内的图片加载 ...

  6. 实现图片懒加载的5种方式

    目录 1.懒加载介绍 2.实现懒加载技术的方案 3.具体实现代码 1.懒加载介绍 当页面需要展示大量图片时,如果一次性渲染所有图片,会向服务器发出大量请求,导致服务器响应慢,出现页面卡顿或崩溃等问题. ...

  7. js图片懒加载的第二种方式

    这种方式是图片按照顺序一张一张的加载直到所有图片都加载完成 html 同样的要让图片进行懒加载,路径引用就得用 data-src <ul><li><img data-sr ...

  8. html图片怎么预加载,如何利用CSS和Javascript实现图片预加载

    说到图片预加载,想必大家已经很熟悉了,在平时的项目中,我们常用插件实现预加载,比如:懒加载lazyload插件等等.如果你想了解下lazyload,可以看下这两篇文章: 今天主要想介绍不用插件实现图片 ...

  9. 代理模式 虚拟代理实现图片预加载

    代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. 在Web开发中,图片预加载是一种常用的技术,如果直接给某个img标签节点设置src属性,由于图片过大或者网络不佳,图片的位置往往有段时 ...

  10. 前端VUE图片预加载

    前景:先来说一下图片预加载跟图片懒加载有什么区别: 1.图片懒加载:相对于项目中的图片因为网络原因加载太慢,那么用户第一眼看到呢可能就是页面图片空白然后图片从上到下慢慢悠悠的加载出来,这个时候自定义化 ...

最新文章

  1. 远程计算机管理权限,肿么获得远程计算机管理员权限
  2. 注册界面php mysql_php:用户登录注册并存入数据库的简单网页示例
  3. 7.18 Shell 管道 重定向 链接
  4. 启明云端分享|ESP32-C3模块入门应用
  5. [kubernetes] kubectl proxy 让外部网络访问K8S service的ClusterIP
  6. 镜头MTF传递函数解读
  7. opencv roberts算子_图像之HOG特征描述算子-行人检测
  8. 《C++标准程序库》——STL迭代器
  9. 高清卫星影像DEM数据免费下载,3款软件4个网站推荐收藏!
  10. 积分简明笔记-第二类曲线积分的类型
  11. 蓝牙开发那些事儿(1)——从抓包数据开始
  12. 如何在电脑端同时登录多个企业微信或微信
  13. php 微信登录手机网站,微信PC端登录和手机端登录逻辑分享
  14. 10/13 Total variation loss 全变分
  15. 鸿蒙系统合作商,华为鸿蒙系统正式版发布,300多家合作伙伴已加入,适配机型公布...
  16. github优秀项目分享 redis客户端
  17. 转换罗马数字,输入一串数字字符串,将其转化为希腊字符串。
  18. DBSCAN聚类分析在图像分割的应用
  19. 微信小程序优惠券列表领取(send-coupon插件)
  20. 关于Mysql使用时出现部分错误的总结

热门文章

  1. 用c语言实现窗口化,c怎么窗口化只能开挂吗
  2. 屏幕显示密度dpi_手机屏幕尺寸,分辨率,密度,dpi,dip,px,sp等详解
  3. 聊一下测试工程师的招聘
  4. 速查!你名下绑定了几个微信
  5. ssci源刊里有开源期刊吗_2020年SCI期刊影响因子重磅发布!你投过的期刊涨了吗?...
  6. Oracle Data Guard官方说明
  7. 一款综合短网址缩短和还原源码
  8. 一元多项式计算器 (c语言数据结构实验)
  9. 建筑企业收并购的三要素
  10. 6 - 常用模块(os,sys,timedatetime,random,jsonpicle,shelve,hashlib)