前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片预加载

图片预加载

作者头像
达达前端
发布2019-07-16 15:20:54
2.3K0
发布2019-07-16 15:20:54
举报
文章被收录于专栏:达达前端达达前端

背景

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

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

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;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 图片相册之结构和样式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档