图片预加载

背景

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

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

jQuery插件的写法

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

网站loading页

[外链图片转存失败(img-NblzF8aU-1563213800947)(https://upload-images.jianshu.io/upload_images/11158618-7fd5ac09363147e0.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

局部图片的加载

图片相册之结构和样式

无序加载,有序加载

[外链图片转存失败(img-xcywx9nT-1563213800949)(https://upload-images.jianshu.io/upload_images/11158618-587fbb39cc78fd7d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

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

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

data-control属性
href="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>

[外链图片转存失败(img-ctXrBNA6-1563213800951)(https://upload-images.jianshu.io/upload_images/11158618-c2179b625f79207a.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

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

图片加载preload.js

(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();

[外链图片转存失败(img-Gb8NzsVv-1563213800959)(https://upload-images.jianshu.io/upload_images/11158618-69769af577042a45.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

图片的预加载:

var  imgObj = new Image();

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

});

imgObj.src= src;

请点赞!因为你的鼓励是我写作的最大动力!

[外链图片转存失败(img-LGhKBIZc-1563213800962)(//upload-images.jianshu.io/upload_images/11158618-f0c11041a76563e7?imageMogr2/auto-orient/strip|imageView2/2/w/1240 “喜欢我就关注我”)]

吹逼交流群:711613774

[外链图片转存失败(img-yWLZbRCu-1563213800963)(//upload-images.jianshu.io/upload_images/11158618-d9d64fa290371ea5.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]

posted @ 2019-07-16 02:04  达达前端  阅读(147)  评论(0编辑  收藏  举报