码迷,mamicode.com
首页 > Web开发 > 详细

JS图片预加载

时间:2015-05-25 19:58:47      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

   在移动端开发中,特别是涉及到 CSS3 动画的情况下,如果在页面加载过程中直接播放动画,我们会发现动画非常卡顿。观察一下,就会发现页面在边播放动画边加载图片,可能出现的情况就是图片还没加载完就动画就完了,这样的体验是不可忍受的。那么,我们可不可以在 CSS3 动画播放前先加载完图片呢?答案是肯定的,并且能解决刚才那个问题。直接上代码。

1,html 标签

在图片的加载过程中,可以先播放一个过渡动画,例如进度条或其它个性化动画。

<div class="loading" id="loading">
    <div id="spinner" class="spinner">
        <div class="bounce1" style=" background-image: url(‘img-path"></div>
    </div>
    <div class="inner">
        <p class="loading_img" style="display: none;">Loading...</p>
        <p class="loading_rate" id="loading_rate">0%</p>
    </div>
</div>

2, js 代码

 1     /*图片预加载*/
 2     var load = document.getElementById(‘loading‘);
 3     var imgPath = ‘imgs-path‘; // 存放图片的路径
 4     var loadingPage = (function () {
 5         var imgSources = [‘img1.png‘,‘img2.png‘,‘img3.jpg‘]; // 需要预加载的图片
 6         for (var i = 0; i < imgSources.length; i++) {
 7             imgSources[i] = (imgPath + imgSources[i]);
 8         };
 9         var loadImage = function (path, callback) {
10             var img = new Image();
11             img.onload = function () {
12                 img.onload = null;
13                 callback(path);
14             }
15             img.src = path;
16         }
17 
18         var imgLoader = function (imgs, callback) {
19             var len = imgs.length, i = 0;
20             while (imgs.length) {
21                 loadImage(imgs.shift(), function (path) {
22                     callback(path, ++i, len);
23                 })
24             }
25         }
26         var rateNum = document.getElementById(‘loading_rate‘);
27         //  var bar = document.getElementById(‘bar‘);
28         var percent = 0;
29         imgLoader(imgSources, function (path, curNum, total) {
30             percent = curNum / total;
31             //$("#pgs2").attr("value", Math.floor(percent * 212));
32 
33             rateNum.innerHTML = Math.floor(percent * 100) + ‘%‘;
34             if (percent == 1) {    // 图片预加载完成后的回调函数
35                 setTimeout(function () {
36                     $(‘#loading‘).css(‘display‘, ‘none‘);
37                 }, 500);
38 
39             }
40         });
41     })();

总结:图片预加载的技术点关键点是利用 onload 事件,以及对多个图片的处理方法和预加载完成百分比的处理思路也是值得借鉴的。

JS图片预加载

标签:

原文地址:http://www.cnblogs.com/byhyd/p/4528594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!