【问题标题】:Building a Progress bar for Loading everything before display在显示之前构建一个进度条以加载所有内容
【发布时间】:2013-04-17 08:40:38
【问题描述】:

您好,我在询问之前确实尝试过搜索.. 我尝试使用 jquery 作为进度条,我找到了很多信息,问题是大多数示例只是“动画”,我的意思是,它们并没有真正显示%,加载过程..我找不到办法。

我正在尝试使用这个http://www.htmldrive.net/items/show/791/Very-Beautiful-CSS3-And-JQuery-progress-bar

混合了这个问题的正确答案。 how to create a jQuery loading bar? (like the ones used on flash sites)

但我就是无法合并

$.when($.ajax("video1.ogv"))
.then(function () {
    videoLoaded[1] = true;
    updateProgressBar();
});

$.when($.ajax("video2.ogv"))
.then(function () {
    videoLoaded[2] = true;
    updateProgressBar();
});

$.when($.ajax("video3.ogv"))
.then(function () {
    videoLoaded[3] = true;
    updateProgressBar();
});

var updateProgressBar = function() {
    // iterate though the videoLoaded array and find the percentage of completed tasks
    $("#progressbar").progressbar("value", percentage);
}

所以我向您展示的 CSS 栏 .. 真正显示已加载 #main_content 的内容或示例中的视频的百分比..

希望我能说清楚,因为我的英语很糟糕。

【问题讨论】:

    标签: javascript jquery css progress-bar loading


    【解决方案1】:

    为什么不做这样的事情呢?只需将其更改为 AJAX 并使用 success 作为触发器。基本上是一个永无止境的动画 gif,等待您的数据加载。

    <div id="chartDiv"></div>
    
    var chartDiv = document.getElementById("chartDiv");
    var loadingImg = document.createElement("img");
    var newImg = document.createElement("img");
    
    loadingImg.src = "http://i1267.photobucket.com/albums/jj559/rizkytanjo96/loading.gif";
    chartDiv.appendChild(loadingImg);
    
    function placeLoaded() {
        chartDiv.removeChild(loadingImg);
        chartDiv.appendChild(newImg);
    }
    
    function getNew() {
        newImg.addEventListener("load", placeLoaded, false);
        newImg.src = "http://i1276.photobucket.com/albums/y462/staffpicks/Animated_GIFs/ahhhh.gif";
    }
    
    setTimeout(getNew, 10000);
    

    jsfiddle

    或者,如果您不想要动画 gif,您可以使用 javascript 执行类似的操作。

    #pwidget {
        background-color:lightgray;
        width:254px;
        padding:2px;
        -moz-border-radius:3px;
        border-radius:3px;
        text-align:left;
        border:1px solid gray;
    }
    #progressbar {
        width:250px;
        padding:1px;
        background-color:white;
        border:1px solid black;
        height:28px;
    }
    #indicator {
        width:0px;
        background-image:url("http://img827.imageshack.us/img827/269/shadedgreen.png");
        height:28px;
        margin:0;
    }
    #loading {
        text-align:center;
        width:250px;
    }
    
    var pwidget = {
        maxprogress: 250,
        actualprogress: 0,
        itv: 0,
        delay: 10,
        prog: function () {
            if (pwidget.actualprogress >= pwidget.maxprogress) {
                clearInterval(pwidget.itv);
                return;
            }
    
            var indicator = document.getElementById("indicator");
    
            pwidget.actualprogress += 1;
            indicator.style.width = pwidget.actualprogress + "px";
    
            if (pwidget.actualprogress === pwidget.maxprogress) {
                pwidget.restart();
            }
        },
        start: function () {
            pwidget.itv = setInterval(pwidget.prog, pwidget.delay);
        },
        stop: function () {
            clearInterval(pwidget.itv);
        },
        restart: function () {
            pwidget.actualprogress = 0;
            pwidget.stop();
            pwidget.start();
        },
        element: function () {
            var pwidget = document.createElement("div"),
                progressbar = document.createElement("div"),
                indicator = document.createElement("div"),
                loading = document.createElement("div");
    
            pwidget.id = "pwidget";
            progressbar.id = "progressbar";
            indicator.id = "indicator";
            loading.id = "loading";
            loading.textContent = "Loading ...";
    
            progressbar.appendChild(indicator);
            pwidget.appendChild(progressbar);
            pwidget.appendChild(loading);
    
            return pwidget;
        }
    };
    
    var chartDiv = document.getElementById("chartDiv");
    var widget = pwidget.element();
    var newImg = document.createElement("img");
    
    function placeLoaded() {
        pwidget.stop();
        chartDiv.removeChild(widget);
        chartDiv.appendChild(newImg);
    }
    
    function getNew() {
        newImg.addEventListener("load", placeLoaded, false);
        newImg.src = "http://i1276.photobucket.com/albums/y462/staffpicks/Animated_GIFs/ahhhh.gif";
    }
    
    chartDiv.appendChild(widget);
    pwidget.start();
    setTimeout(getNew, 10000);
    

    jsfiddle

    或者jQueryUI has a progress bar,你可以做与我上面的例子类似的事情。

    【讨论】:

    • 谢谢!非常有用,这是完美的,对于低 gif 加载,我的最佳选择是多少帧......我可以构建一个自定义的,所以如果你有任何想法,很高兴知道。顺便说一句,加载后的面孔是最好的部分jajaja:D不错。
    • 伙计,但代码上还有一个计时器,所以如果我放一秒钟,它会在显示前等待一秒钟,即使网络上仍有加载元素-.....: (重点是在我显示页面之前所有内容都已加载!!..如果没有,加载的意义何在....我需要一些东西来检查是否正在加载某些内容,并且在加载时它可以显示页面.
    • 这正是“加载”事件的作用,它们仅在完成加载时触发。所以,我不确定你在挣扎什么。我的第二个示例中的计时器/延迟只是为了增加绿色条以给人一种正在发生的感觉,将其设置为低至 1 毫秒(当前为 10 毫秒)或您想要的。如果您希望它更快地填充,还可以更改步数。
    • 感谢stackoverflow.com/questions/1435015/…我给你正确答案
    【解决方案2】:

    大多数网站使用超过百分比的加载 gif 的部分原因是因为百分比确实不可靠。

    您可能会遇到这样一种情况,即您将实际进度显示为精确的百分比,然后当需要 5 秒加载 75% 和 10 秒加载 25% 时,会发生一些事情导致流量变慢并让用户感到沮丧。有很多例子,但我会在这里停下来。

    如果可能的话,我会采取超过百分之一的加载方法,不要仅仅因为这个原因而接近。只要有迹象表明正在完成的工作,用户通常都会很高兴。

    [编辑] 抱歉,我花了一点时间才回到这个问题上并给你一个例子。 这是非常基本的,并且实际上取决于您如何显示此加载栏以及如何将其添加到页面中。重点在这条线上

    $('<div>').progressbar({ value: false })
    

    希望这会有所帮助。 jQuery progress bar 确实允许百分比,除非绝对需要,否则我仍会尽量避免它。

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="Scripts/jquery-2.0.0.js"></script>
        <script src="Scripts/jquery-ui-1.10.3.js"></script>
        <link href="Content/themes/base/jquery-ui.css" rel="stylesheet" />
        <script>
            function show_loading()
            {
                $('<div>').dialog
                    ({
                        title: 'loading...',
                        modal: true,
                        closeOnEscape: true,
                        draggable: false,
                        resizable: false
                    })
                .append($('<div>').progressbar({ value: false }));
            }
        </script>
    </head>
    <body>
        <button id="show_loading" onclick="show_loading();">show loader</button>
    </body>
    </html>
    

    【讨论】:

    • 但是如果加载栏之前结束,并且页面仍在加载,这是我想要避免的......我真的希望在页面显示给我的用户之前加载所有内容。什么是我最好的选择......你能告诉我一个带有你刚才提到的特征的 GIF 的例子吗?谢谢!
    • 这就是永无止境的作品如此受欢迎的原因。圆形装载机或糖果条preloaders
    • 能否请你给我一个例子或一篇文章,或者什么,我会搜索“永无止境的加载栏”,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多