Page loader精确数字提示

页面加载过度

1、可加载css,js文件

2、可为每个加载文件设置回调函数

3、加载完成后自动删除页面DOM

4、使用Ajax level2提供精确的加载的字节书

5、必须要手动提示每个要加载项目的文件大小字节数

6、跨浏览器支持

7、无需任何类库支持



<!DOCTYPE html>
<html>
<head>
  <title>page Loader</title>
  <meta charset="UTF-8">
  <style type="text/css">
    html, body{
      font: normal 2em Arial !important;
    }
    div{
      -moz-border-radius: 3px;
      -ms-border-radius: 3px;
      -o-border-radius: 3px;
      -webkit-border-radius: 3px;
      border-radius: 3px;
    }
    .pageLoader {
      width: 45%;
      padding: 0;
      text-shadow: rgba(160,160,160,.6) 3px 3px 3px;
      margin: 15% auto 0px;
    }

    .loadedCount{
      position: absolute;
      right:20px;
      bottom: 10px;
      font-size: 150%;
    }

    .processBar, .processVal{
      height: 4px;
    }

    .processBar {
      width: 100%;
      background: #ccc;
      background: -moz-linear-gradient(#aaa, #eee);
      background: -ms-linear-gradient(#aaa, #eee);
      background: -webkit-linear-gradient(#aaa, #eee);
      background: -o-linear-gradient(#aaa, #eee);
      background: linear-gradient(#aaa, #eee);
    }

    .processVal {
      width: 0%;
      background: lime;
      background: -ms-linear-gradient(left, green, lime);
      background: -moz-linear-gradient(left, green, lime);
      background: -webkit-linear-gradient(left, green, lime);
      background: -o-linear-gradient(left, green, lime);
      background: linear-gradient(to right, green, lime);
      filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1,startColorstr=green, endColorstr=lime);

      transform:translateY(-4px);
      -ms-transform:translateY(-4px);
      -moz-transform:translateY(-4px);
      -o-transform:translateY(-4px);
      -webkit-transform:translateY(-4px);
    }

    .processDesc {
      text-align: center;
      font-size: 150%;
      margin: 0px auto 10px;
    }
  </style>
  <script type="text/javascript">
    var options = {
      loadFiles: [{
        url: '/resources/css/ext-all-notheme.css',
        size: 102316,
        describe: '不带颜色的ExtJs样式文件',
        callback: {
          fn: function() {},
          scope: null,
          args: null
        }
      }, {
        url: '/resources/css/desktop.css',
        size: 18570,
        describe: '桌面应用框架的样式文件',
        callback: {
          fn: function() {},
          scope: null,
          args: null
        }
      }, {
        url: '/js/ext.min.js',
        size: 710906,
        describe: 'Extjs框架文件',
        callback: {
          fn: function() {},
          scope: null,
          args: null
        }
      }, {
        url: '/frameWork.js',
        size: 67961,
        describe: '桌面应用框架文件',
        callback: {
          fn: function() {},
          scope: null,
          args: null
        }
      }, {
        suffix: 'js',
        url: '/server/php/getUserConfig.php',
        size: 4142,
        describe: '用户配置文件',
        callback: {
          fn: function() {
            QoDesk.app.initApp()
          },
          scope: null,
          args: null
        }
      }]
    };
    (function(o) {
      if (!o || !o.loadFiles || !Array.isArray(o.loadFiles) || o.loadFiles.length <= 0) {
        alert('loadFiles is empty!');
        return
      }
      function createXHR() {
        if (typeof XMLHttpRequest != "undefined") {
          return new XMLHttpRequest()
        } else if (typeof ActiveXObject != "undefined") {
          if (typeof arguments.callee.activeXString != "string") {
            var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"],
              i, len;
            for (i = 0, len = versions.length; i < len; i++) {
              try {
                var xhr = new ActiveXObject(versions[i]);
                arguments.callee.activeXString = versions[i];
                return xhr
              } catch (ex) {}
            }
          }
          return new ActiveXObject(arguments.callee.activeXString)
        } else {
          throw new Error("No XHR object available.");
        }
      }
      function initLoadFiles() {
        function getSuffix(url) {
          return url.substring(url.lastIndexOf('.') + 1, url.length).toLowerCase()
        }
        function getPath(url) {
          return url.substring(0, url.lastIndexOf('/') + 1).toLowerCase()
        }
        for (var i = 0; i < opt.loadFiles.length; i++) {
          opt.loadFiles[i].path = getPath(opt.loadFiles[i].url);
          opt.loadFiles[i].suffix = opt.loadFiles[i].suffix || getSuffix(opt.loadFiles[i].url);
          totalSize += opt.loadFiles[i].size
        }
      }
      function load() {
        var xhr = createXHR(), loadingItem = opt.loadFiles[loadingItemIdx];
        var loadComplete = function(event) {
            function callback(cb) {
              if (cb && typeof(cb.fn) === 'function') {
                if (cb.scope && typeof(cb.scope) === 'object') {
                  if (cb.args && typeof(cb.args) === 'object') {
                    cb.fn.call(cb.scope, cb.args)
                  } else {
                    cb.fn.call(cb.scope)
                  }
                } else {
                  cb.fn.call()
                }
              }
            }
            switch (loadingItem.suffix) {
            case 'css':
              var styleDom = document.createElement('style');
              styleDom.setAttribute('id', loadingItem.url);
              styleDom.setAttribute('type', 'text/css');
              document.head.appendChild(styleDom);
              var styleCode = event.target.responseText.replace(/url\s*\(\s*/gi, 'url(' + loadingItem.path);
              styleDom.appendChild(document.createTextNode(styleCode));
              break;
            case 'js':
              eval(event.target.responseText);
              break
            }
            totalLoadSize += event.loaded;
            if (++loadingItemIdx < opt.loadFiles.length) {
              callback(loadingItem.callback);
              load()
            }else{
              if(opt.autoDestroy){
                document.head.removeChild(document.head.querySelector('style'));
                document.head.removeChild(document.head.querySelector('script'));
                document.body.removeChild(document.body.querySelector('.pageLoader'));
              }
              callback(loadingItem.callback);
            }
          };
        xhr.onprogress = function(event) {
          var loadedPercentage = ((totalLoadSize + event.loaded) / totalSize * 100).toFixed(2),
            processDesc = document.querySelector('.pageLoader .processDesc'),
            processVal = document.querySelector('.pageLoader .processVal');
          processDesc.innerText = (loadedPercentage == 100.00 ? 100 : loadedPercentage) + '%';
          processVal.style.width = (loadedPercentage == 100.00 ? 100 : loadedPercentage) + '%'
        };
        xhr.onload = loadComplete;
        xhr.open('get', loadingItem.url, true);
        xhr.send(null)
      }
      function init() {
        initLoadFiles();
        load()
      }
      var opt = {
        id: 'pageLoader',
        autoDestroy: true
      };
      if (o && typeof(o) === 'object') {
        for (var p in o) {
          opt[p] = o[p]
        }
      }
      var loadingItemIdx = totalLoadSize = totalSize = 0;
      window.onload = init
    })(options);
  </script>
</head>
<body scroll="no" onselectstart="return false">
<div class="pageLoader">
  <div class="processDesc">0.00%</div>
  <div class="processBar"></div>
  <div class="processVal"></div>
</div>
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值