html5前端开发Web前端之路

JS实现文件加载进度

2016-08-30  本文已影响1606人  Tiny_z

目前在移动页面上,有很多情况需要加载大量的资源。但是移动端的访问速度和pc还是有很大的差距,有些时候需要一些取巧的方式来提升用户体验,而实时显示加载进度就是其中一种。

最终效果

代码如下

  <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{margin: 0;padding: 0;}
        div{width:200px;height: 30px;border:1px solid #ccc;margin: 50px auto;}
        span{display:inline-block;height: 30px;background: #abcdef;}
    </style>
</head>
<body>

    <div>
        <span id="loading"></span>
    </div>


    <!-- 图片需要自己添加到本地  协议要走http or https -->
    <script>
        var img_arr = ['1.jpg','2.jpg','3.png'];
        var nums = img_arr.length;
        var start = 0;
        for(var i in img_arr){
            var img = document.createElement('img');
            img.src = img_arr[i];
            (function(j){
                img.onload = function(){
                    start++;
                    if(start == nums){
                        console.log('全部加载完成');
                    }
                    document.getElementById('loading').style.width = (start/nums)*100 + '%';
                };
                img.onerror = function(){
                    start++;
                    console.log(img_arr[j] + '失败');
                    document.getElementById('loading').style.width = (start/nums)*100 + '%';
                }
            })(i);
            
        }

    </script>
</body>
</html>

有些情况下,资源会加载失败,但是页面又需要显示出来。这里我是把失败的情况就跳过了,如果有需要,可以考虑重新换资源加载

注意事项

chrome 控制台

拓展

这里只监听了img格式,如果有需要,可以把js和css都加进来

注意:监听js或者css,需要把创建的资源追加到页面中,要不然监听不到onload和onerror事件

  <script>
        var script_arr = ['http://cdn.bootcss.com/jquery/3.1.0/jquery.slim.js','http://cdn.bootcss.com/jquery/3.0.0-rc1/jquery.js','http://cdn.bootcss.com/jquery/3.0.0-beta1/jquery.slim.min.js'];
        var nums = script_arr.length;
        var start = 0;
        for(var i in script_arr){
            var script = document.createElement('script');
            script.src = script_arr[i];
            (function(j){
                document.body.appendChild(script);
                script.onload = function(){
                    start++;
                    if(start == nums){
                        console.log('全部加载完成');
                    }
                    document.getElementById('loading').style.width = (start/nums)*100 + '%';
                };
                script.onerror = function(){
                    start++;
                    console.log(srcript_arr[j] + '失败');
                    document.getElementById('loading').style.width = (start/nums)*100 + '%';
                }
            })(i);
            
        }

    </script>
point
上一篇 下一篇

猜你喜欢

热点阅读