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左右就能把所有大图加载完成,图片切换起来就会快很多,亚马逊也使用的类似解决方法

    优秀文章首发于聚享小站,欢迎关注!
  • 相关阅读:
    打印空格
    进程间的通信
    堆排序算法
    大小端的判断
    bash help
    [Android] How to disable the screen orientation?
    图片的静态动态显示效果
    WPF Threads: Build More Responsive Apps With The Dispatcher
    用node.js+express自建网站发布静态网页
    利用Apache mod_expires 与 mod_headers 实现文件缓存及mod_deflate压缩输出
  • 原文地址:https://www.cnblogs.com/yesyes/p/15349699.html
Copyright © 2011-2022 走看看