iframe使用jQuery加载进度条?

Roy*_*mir 3 html javascript iframe jquery progress-bar

在我的工作(内联网) - 我有一个aspx页面,其中有许多Iframe(我们所有的).

每个iframe都由btnX设置(js/jquery)(aspx页面中有很多按钮......有些设置src到iframes - 有些没有).

在此输入图像描述

注意:progrssBAr在主页面上...

目标:在iframe加载时progressBar ...

代码:(起初myPageWrapperdisplay:none)

$('#myPageWrapper').on ('load','iframe',function () { $("#myProgressBar").hide();});
Run Code Online (Sandbox Code Playgroud)

2个问题:

  • 我可以听iframes加载完成事件.但是showingProgfressBar怎么样?我不想编辑所有btn的事件"onclick" - 是否有任何集中解决方案[使用jquery]?

我需要做的事情:

"当btn设置src为iframe时 - 显示myProgressBar"

  • 可以发生同时发生的事件:iframe A正在加载2分钟(示例) - 所以它显示了进度条,同时我按下了设置src为iframe B的其他按钮 - 加载非常快......一旦加载 - 它隐藏了进度条(看我的代码) - 它不应该...... 一个又didnt完成....

Luc*_*ofi 12

代码更新

  • 注意: 因为我收到了3票,我认为这段代码正在帮助其他人而不是原来的OP; 所以我决定更新代码以反映它在开始时的意图,因为到目前为止OP和我已经发现他的问题在他的代码中的其他地方.

演示: http ://so.lucafilosofi.com/iframes-loading-with-progress-bar-using-jquery/

主页负责人

        var iframes = [], progress = 0;
        $(function() {
            $pGressIndex = $('#progress-bar-indicator');
            $('#navigation a').click(function() {

                var iframe_id = this.hash.split('#')[1];

                if (iframes.indexOf(iframe_id) === -1) {

                    $('#log').prepend('<p><strong>' + iframe_id + '</strong> is loading!</p>');

                    iframes.push(iframe_id);

                    if (parseInt($pGressIndex.width()) == 960) {
                        $pGressIndex.removeAttr('style');
                    }

                    var fW = (iframes.length > 1) ? (660 - (20 * iframes.length ) ) : 660;

                    $pGressIndex.animate({
                        width : fW
                    }, 5000);

                    var iframe_page = iframe_id + '.html';

                    if ($(this.hash).length != 0) {
                        $(this.hash).remove();
                    }

                    $('<iframe>').attr({
                        id : iframe_id,
                        src : iframe_page,
                        frameBorder : 0,
                        width : 960
                    }).appendTo('#iframes-wrapper');
                }
                return false;
            });
        });
Run Code Online (Sandbox Code Playgroud)

主页底部:

            window.addEventListener("message", function(e) {
                console.log(iframes);
                var index = iframes.indexOf(e.data);
                iframes.splice(index, 1);
                if (iframes.length == 0) {
                    $pGressIndex.stop(true).animate({
                        width : 960
                    }, 100);
                }
                $('#' + e.data).show();
            }, false);
Run Code Online (Sandbox Code Playgroud)

每个iframe页面的底部:

           top.postMessage('frame-name-or-what-you-want', window.location.href);
Run Code Online (Sandbox Code Playgroud)