首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js img预加载

一、基础概念

  1. 定义
    • 在JavaScript中,图片预加载(img preloading)是指在页面渲染或者特定操作之前,提前将图片资源加载到浏览器缓存中的过程。这样做可以避免在后续需要显示图片时出现延迟等待加载的情况。
  • 原理
    • 当创建一个Image对象并设置其src属性时,浏览器会开始加载指定的图片资源。即使这个Image对象还没有被添加到DOM(文档对象模型)中显示给用户,图片也会被下载并缓存起来。

二、相关优势

  1. 提升用户体验
    • 减少页面切换或者元素显示时的等待时间。例如,在一个图片轮播组件中,如果提前预加载了下一张图片,当轮播到该图片时就能够立即显示,不会出现加载中的空白或者卡顿现象。
  • 优化性能
    • 避免重复加载相同的图片资源。如果有多个元素可能会显示同一张图片,预加载后只需要从缓存中获取,减少了网络请求次数,从而节省了带宽并且提高了页面的整体性能。

三、类型

  1. 简单预加载
    • 只是简单地创建Image对象并设置src属性。例如:
    • 只是简单地创建Image对象并设置src属性。例如:
  • 按顺序预加载
    • 当有一组图片需要按照特定顺序加载时,可以使用递归或者循环来逐个创建Image对象并设置src属性。
    • 当有一组图片需要按照特定顺序加载时,可以使用递归或者循环来逐个创建Image对象并设置src属性。
  • 基于事件的预加载
    • 根据用户的操作(如鼠标悬停、点击等)来预加载特定的图片。例如,当用户将鼠标悬停在某个按钮上时预加载相关图片。
    • 根据用户的操作(如鼠标悬停、点击等)来预加载特定的图片。例如,当用户将鼠标悬停在某个按钮上时预加载相关图片。

四、应用场景

  1. 图片轮播
    • 如前面提到的,为了实现流畅的轮播效果,需要预加载相邻的图片。
  • 懒加载补充
    • 在使用懒加载技术(当图片进入视口才加载)的页面中,可以预加载视口附近即将进入视口的图片,以提高视觉上的流畅性。
  • 大型图像展示
    • 在一些艺术画廊网站或者产品展示页面,对于高分辨率的图片,预加载可以让用户在点击查看大图时无需等待加载。

五、可能遇到的问题及解决方法

  1. 内存占用问题
    • 如果预加载大量高分辨率的图片,可能会导致浏览器内存占用过高。
    • 解决方法:
      • 可以根据设备的性能和屏幕分辨率来调整预加载图片的质量或者数量。例如,在移动设备上只预加载低分辨率的缩略图版本,当需要查看高分辨率图片时再进行替换加载。
      • 及时清理不再需要的预加载图片缓存。可以通过设置合适的缓存策略或者在图片不再需要时手动将Image对象的src属性设置为空字符串来促使浏览器释放内存。
  • 预加载失败问题
    • 网络问题或者图片资源不存在等情况可能导致预加载失败。
    • 解决方法:
      • 可以添加错误处理机制。例如,在创建Image对象时监听onerror事件,当预加载失败时可以尝试重新加载或者给出提示。
      • 可以添加错误处理机制。例如,在创建Image对象时监听onerror事件,当预加载失败时可以尝试重新加载或者给出提示。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS图片预加载插件

在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验。  ...1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。...2)区别: 两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。...--无序预加载需要写进度条,当加载完毕后才能操作; 有序预加载可以不写进度条,加载完第一张后立即加载第二张、第三张、第四张... --> img src="http://image.hnol.net/c/2010-11/14/21/201011142147143181-239867.jpg" id="img" alt

16.8K50

JS魔法堂:IMG元素加载行为详解

一、前言                               在《JS魔法堂:jsDeferred源码剖析》中我们了解到img元素加载失败可以作为函数异步执行的优化方案,本文打算对img元素的加载行为进行更深入的探讨...二、资源加载的相关属性和事件                     资源加载首先当然是确定资源位置的 src属性 、随之就是资源加载成功与否的 onload事件 和 onerror事件 ,对于IE5~...onload事件 ,当资源加载完成并成功解析后触发(若加载的不是image/*类型的资源,则解析失败)。 onerror事件 ,当找不到资源或解析失败后触发。...complete属性 ,用于表示IMG元素的资源是否成功解析。默认为false,,onload事件触发后变为true(onload事件处理函数运行时,readyState依然为false)。...四、总结                              这里仅仅对IMG元素加载http、javascript和data的URI Scheme等进行实验,加上实验手段等问题,难免导致统计数据不全面

2.8K60
  • js - 预加载+监听图片资源加载制作进度条

    因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕。即处理预加载。...原来页面加载完毕后刷新,再展示的图片都是缓存的图,而load又监听不到缓存的图。 要了我的老命了。 于是我又找,什么方法能监听缓存的图啊? 目标锁定了js里的img.complete。...注意划重点是js的属性。...但是到手机上发现,会有6张缓存图1张加载图,导致下边要说的加载进度计算错误,先是变成70%,又变回20%。 后来才改成这两种情况都累加到一处了。 四、预加载进度计算并展示 好了,现在需求升级。...Math.ceil(Number(this.count)); if(boxText >= 100){ boxText = 100; //接下来执行预加载完毕

    9.8K22

    图片预加载

    背景 利用图片的预加载技术获得更好的用户体验 什么是有序预加载和无序预加载 jQuery插件的写法 图片预加载,预知用户将要发生的行为,提前加载用户所需的图片 网站loading页 image.png...局部图片的加载 图片相册之结构和样式 无序加载,有序加载 image.png 图片预加载: 分类: 1:无序加载 2:有序加载 清除下滑线:text-decoration:none; data-control...src="js/index2-4.js"> // 定义一个图片数组 var imgs = [ 'https://github.com...}else{ load(); } count++; }); imgObj.src=imgs[count]; } 图片加载preload.js (function ($) { function..._unoredered(); } } PreLoad.DEFAULTS = { order: 'unordered', // 无序预加载 each: null, // 每一张图片加载完毕后执行

    2.3K30

    图片预加载和懒加载

    懒加载:在需要显示图片的时候才去加载图片。 预加载:在还没显示的时候就加载图片。 在说预加载和懒加载之前。我们先说说图片加载的时机。...1、设置了display: none的img标签和元素背景图片,不会渲染但是会加载。...2、父元素div设置了display: none,那么这个父元素里面的子元素img标签会加 载,父元素里面子元素背景图片不会加载 3、重复或者加载过的图片只会加载一次 4、不存在元素的背景图片不会加载...预加载 虽然页面还不需要显示图片,但是我们已经把这些图片加载下来了,只是不显示这些图片,我们都知道浏览器是会缓存请求过的图片,预加载就是基于这个原理。...其实懒加载和预加载都是需要看需要决定的,比如需要几十张图片显示,但是有优先顺序,就使用懒加载,如果是只有几张小图,页面渲染速度也够快,想要交互的时候响应快速,使用预加载。

    2.8K20

    前端懒加载和预加载

    懒加载和预加载的目的都是为了提高用户的体验,二者行为是相反的,一个是延迟加载,另一个是提前加载。懒加载对缓解服务器压力有一定作用,预加载则会增长服务器前端压力缓存。...,当我们继续滚动直到出现页面底部,通过开发者工具看到如下的截图:图片图片预加载 preload预加载:提前加载所需要的图片资源,加载完毕后会缓存到本地,当需要时可以立刻显示出来。...参考视频讲解:进入学习实现方法1 通过CSS步骤创建用来预加载的标签给标签使用背景图,背景图的路径是需要预加载的图片资源,并将图片移到看不见的地方,或缩小到看不见。...当使用到已经预加载好的图片时,会直接使用缓存好的图片资源,而不需要向服务器发送请求。预加载图片的 URL<!

    2.2K20

    img图片加载出错处理

    其实,可以这样处理:当图片不存在的时候,会触发onerror事件,我们可以在该事件中做一下补救的工作,比如: 1、让这个图片元素隐藏: img src="图片的url地址" alt="图片XX" onerror...="this.style.display='none'"/> 2、用默认的图片替换: img src="图片的url地址" alt="图片XX" onerror="this.src='默认图片的url...比如:当【默认图片的url地址】也加载不成功(比如网速比较慢的时候)或不存在的话,就会反复的加载,最后造成堆栈溢出错误。...b、控制onerror事件只触发一次,需要增加这句话:this.οnerrοr=null; 增加后如下: img src="图片的url地址" alt="图片XX" onerror="this.src...='默认图片的url地址';this.οnerrοr=null"/> 经测试,上面的方法在IE各个版本及谷歌、火狐浏览器中都支持 img图片属性 vertical-align用来设置垂直对齐方式,所有垂直对齐的元素都会影响行高

    2.7K20

    Angular 启用预加载

    我们可以通过预加载路由来修复这个问题。路由可以在用户与其它部分交互的时候,异步加载延迟的模块。这可以使用户在访问延迟模块的时候更快地访问。 本文将在上一个示例的基础上,增加预加载的功能。...需要注意的是,Home 组件是提前加载的。我们将在系统启动之后渲染这个组件。 在 Angular 渲染 Home 组件之后,用户就可以与应用交互了,我们可以通过简单的配置在后台预加载其它模块。...启用预加载 我们在 forRoot 函数中,提供一个预加载的策略。...定制预加载策略 router 包中预定义了两个策略: 不预加载 NoPreloading 预加载所有模块 PreloadAllModules 5 秒之后加载模块 但是,您可以自己定义一个定制的策略。...加载指定模块 我们还可以在路由中定义附加的参数来指定哪些模块进行预加载,我们使用路由定义中的 data 来提供这个附加的数据。

    1.5K00
    领券