【问题标题】:Iframes loading with progress bar using jQuery?使用 jQuery 加载带有进度条的 iframe?
【发布时间】:2012-05-01 12:12:50
【问题描述】:

在我的工作中(内联网)- 我有一个包含许多 iframe 的 aspx 页面(我们所有的)。

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

注意:progrssBAr 在主页上...

目标:加载 iframe 时的进度条...

代码: (起初myPageWrapperdisplay:none

$('#myPageWrapper').on ('load','iframe',function () { $("#myProgressBar").hide();});

2 个问题:

  • 我可以监听 iframe 加载完成事件。但是showing ProgfresBar 呢? 我不想编辑所有 btn 的事件“onclick”-[使用 jquery] 是否有任何集中的解决方案?

我需要一些东西:

“当 btn 将 src 设置为 iframe - 显示 myProgressBar

  • 可能同时发生事件:iframe A 正在加载 2 分钟(示例) - 所以它显示了进度条,同时我按下了设置 @987654329 的其他按钮@ to iframe B - 加载速度非常快......一旦加载 - 它隐藏 ProgressBar(看看我的代码) - 它不应该......A还没写完....

【问题讨论】:

  • 也许是个愚蠢的问题,但你需要 iframe 吗?您还可以使用 ajax 加载 div。
  • 这就是您所需要的:easyxdm.net/wp - 跨域消息传递变得简单
  • @JPHellemons 在我的 Intranet 工作中......他们创建了页面并设置了 src......有时使用 iframe 更好 - 你没有在一页中拥有所有内容......你可以单独测试页面等...我知道它对 SEO 不利。但这不是问题
  • 好的,我只是想知道是否需要 iframe。
  • @aSeptik 这里没有跨域......都是我们的。

标签: javascript jquery html iframe progress-bar


【解决方案1】:

代码更新

  • 注意因为我收到了 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;
            });
        });

主页底部:

            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);

每个 iframe 页面的底部:

           top.postMessage('frame-name-or-what-you-want', window.location.href);

【讨论】:

  • 我无话可说感谢您的努力和帮助。谢谢你:)
  • @Royi Namir:我将添加一些小修复和评论源..!不客气,我很高兴它有帮助...
  • 为什么不监听每个 iframe 的加载事件?
  • 我的页面上目前(例如)有 100 个 iframe。每个都通过不同的按钮设置一个 SRC。告诉我的行在哪里:“有人将 SRC attr 设置为 iframe”?我需要听页面中的所有按钮吗? **我只需要那些设置SRC的事件**
  • 你必须监听所有按钮,是的,你基本上列出了点击事件,所以当有人点击一个按钮时,你就知道会创建一个 iframe....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
相关资源
最近更新 更多