图片预加载

2019-07-16 15:20:54 浏览数 (2)

背景

利用图片的预加载技术获得更好的用户体验

什么是有序预加载和无序预加载

jQuery插件的写法

图片预加载,预知用户将要发生的行为,提前加载用户所需的图片

网站loading页

image.png

局部图片的加载

图片相册之结构和样式

无序加载,有序加载

image.png

图片预加载: 分类: 1:无序加载 2:有序加载

清除下滑线:text-decoration:none;

data-control属性 href="javascript:;"空链接

代码语言:javascript复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>图片加载之无序加载</title>
    <style>
      .box {
        text-align: center;
        margin-top: 20px;
      }
      .box .btn {
        display: inline-block;
        height: 30px;
        line-height: 30px;
        border: 1px solid #ccc;
        background-color: #fff;
        padding: 0 10px;
        margin-right: 50px;
        color: #333;
      }
      .box .btn:hover {
        background-color: #eee;
      }
      .box a {
        text-decoration: none;
      }
      .box img {
        height: 80vh;
        width: 90vw;
      }
      .loading {
        position: fixed;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        background-color: #eee;
        text-align: center;
        font-size: 30px;
        display: flex;
        justify-content: center;
        align-items: center;
      }
    </style>
  </head>
  <body>
    <!--内容展示区域-->
    <div class="box">
      <img id="img" src="" alt="" title="" />
      <p>
        <a href="javascript:void(0);" class="btn" data-control="prev">上一页</a>
        <a href="javascript:void(0);" class="btn" data-control="nex">下一页</a>
      </p>
    </div>
    <!--内容加载页区域-->
    <div class="loading">
      <p class="progress">0%</p>
    </div>

    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript" src="js/index2-4.js"></script>
    <script>
      // 定义一个图片数组
      var imgs = [
        'https://github.com///blob/master/ProImages/ImgPreloading01.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading02.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading03.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading04.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading05.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading06.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading07.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading08.jpg?raw=true',
        'https://github.com///blob/master/ProImages/ImgPreloading09.jpg?raw=true',
        'https://github.com//blob/master/ProImages/ImgPreloading10.jpg?raw=true'
      ];
      // 获取图片数组的长度
      var index = 0;
      var len = imgs.length;
      var $progress = $('.progress');

      // 调用插件
      $.preload(imgs, {
        // 实现遍历的功能
        each: function(count) {
          $progress.html(Math.round((count   1) / len * 100)   '%');
        },
        // 实现隐藏遮罩层的功能
        all: function() {
          $('.loading').hide();
        }
      })
      // 定义点击事件
      $('.btn').on('click', function() {
        if('prev' === $(this).data('control')) {
          index = Math.max(0, --index);
        } else {
          index = Math.min(len - 1,   index)
        }
        document.title = (index   1)   '/'   len;
        $("#img").attr('src', imgs[index]);
      })
      // 为初始页面赋值
      document.title = (index   1)   '/'   len;
      $("#img").attr('src', imgs[index]);
    </script>
  </body>
</html>

image.png

代码语言:javascript复制
load();
// 有序预加载
function load() {
 var imgObj = new Image();
 $(imgObj).on('load error', function () {
  if(count >= len) {
  // 所有图片已经加载完毕
  }else{
  load();
  }
  count  ;
});
imgObj.src=imgs[count];
}

图片加载preload.js

代码语言:javascript复制
(function ($) {
 function PreLoad(imgs, options) {
  this.imgs = (typeof imgs === 'string') ? [imgs] : imgs;
  this.opts = $.extend({}, PreLoad.DEFAULTS, options);
  
  if (this.opts.order === 'ordered') {
   this._ordered();
 } else {
   this._unoredered();
 }
}
PreLoad.DEFAULTS = {
 order: 'unordered', // 无序预加载
 each: null, // 每一张图片加载完毕后执行
 all: null // 所有图片加载完毕后执行
};
PreLoad.prototype._ordered = function () { // 有序加载
 var opts = this.opts,
 imgs = this.imgs,
 len = imgs.length,
 count = 0;

load();
// 有序预加载
function load() {
 var imgObj = new Image();
 $(imgObj).on('load error', function () {
 opts.each && opts.each(count);
  if(count >= len) {
  // 所有图片已经加载完毕
  opts.all && opts.all();
  }else{
  load();
  }
  count  ;
});
imgObj.src=imgs[count];
}

},
PreLoad.prototype._unoreddered = function () { // 无序加载
 var imgs = this.imgs,
 opt = this.opts,
 count = 0,
 len = img.length;
 $.each(imgs, function(i, src) {
  if(typeof src != 'string') return;
  var imgObj = new Image();

图片的预加载:

代码语言:javascript复制
var  imgObj = new Image();

$(imgObj).on('load error', function() {

});

imgObj.src= src;

0 人点赞