zoukankan      html  css  js  c++  java
  • js图片预加载处理方案

    参考链接

    核心函数

    /**
     * 图片预加载
     * @return {function}
     * imgList 需要预加载的图片地址
     * callback 图片加载完成后的回掉,可获取到加载进度值
     * timeout  图片加载等待时间
     */
    (function() {
      var loader = function(imgList, callback, timeout) {
        timeout = timeout || 5000;
        var total = imgList.length,
          loaded = 0,
          imgages = [],
          _on = function() {
            if (loaded < total) {
              ++loaded
              if (callback) {
                callback(loaded / total)
              }
            }
          };
    
        if (!total) {
          return callback && callback(1);
        }
    
        for (var i = 0; i < total; i++) {
          imgages[i] = new Image();
          imgages[i].onload = imgages[i].onerror = _on;
          imgages[i].src = imgList[i];
        }
    
        // 指定时间内图片没有加载完,不在等待
        var timer = setTimeout(function() {
          if (loaded < total) {
            loaded = total
            if (callback) {
              callback(loaded / total)
            }
          }
          clearTimeout(timer)
        }, timeout * total);
      };
    
      window.imgLoader = loader
    })();
    

    使用方法

    let arr = ['http://test.com/a.jpg', 'http://test.com/b.jpg','http://test.com/c.jpg']
    imgLoader(arr, function(pre) {
      console.log(pre)
    })
    

    使用场景

    最近业务上有一个需求,优化图片加载速度,最简单粗暴的方法就是预加载啦,下面以图片说明:


    由于业务主要服务海外用户,所以服务器不在国内,每次点击左边的小图片,都要等几秒右边大图才能加载完成,严重影响用户体验,这项目使用vue开发的,于是在mounted钩子里调用预加载方法,这样不影响用户正常进入详情页,进入详情页后,浏览器开始偷偷的请求图片,一般4s左右就能把所有大图加载完成,图片切换起来就会快很多,亚马逊也使用的类似解决方法

    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    springboot日志框架
    springboot创建一个可执行的jar
    springboot整合Thymeleaf模板引擎
    springboot自定义SpringApplication启动类
    springboot配置mybatis的mapper路径
    使用@SpringBootApplication注解
    HDU1269 迷宫城堡 —— 强连通分量
    POJ3177 Redundant Paths —— 边双联通分量 + 缩点
    HDU3394 Railway —— 点双联通分量 + 桥(割边)
    UVA796 Critical Links —— 割边(桥)
  • 原文地址:https://www.cnblogs.com/yesyes/p/15349699.html
Copyright © 2011-2022 走看看