Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
即使在检查onload事件javascript时,iframe内容也不会出现在屏幕上_Javascript_Jquery_Iframe_Settimeout_Onload - Fatal编程技术网

即使在检查onload事件javascript时,iframe内容也不会出现在屏幕上

即使在检查onload事件javascript时,iframe内容也不会出现在屏幕上,javascript,jquery,iframe,settimeout,onload,Javascript,Jquery,Iframe,Settimeout,Onload,我们正在尝试构建一个HTML游戏,其中abobe edge用于动画,这些动画被插入到iframes中。我们正在尝试在删除“加载屏幕”之前预加载iFrame,以便用户最初不会看到空白iFrame 下面是加载iFrame的代码 我们有一个全局变量var middlebotload=false 以下函数尝试动态填充iframe,加载iframe后,我们将变量分配给true function _trackIFrameLoading() { if (document.getElementById(

我们正在尝试构建一个HTML游戏,其中
abobe edge
用于动画,这些动画被插入到
iframes
中。我们正在尝试在删除“加载屏幕”之前预加载
iFrame
,以便用户最初不会看到空白iFrame

下面是加载
iFrame
的代码

我们有一个全局变量
var middlebotload=false

以下函数尝试动态填充
iframe
,加载
iframe
后,我们将
变量分配给
true

function _trackIFrameLoading()
{
    if (document.getElementById("botzmiddleidlesequence_iframe").attachEvent)
    {
        document.getElementById("botzmiddleidlesequence_iframe").attachEvent("onload", function() { middleBotLoaded = true; });
    } 
    else 
    {
        document.getElementById("botzmiddleidlesequence_iframe").onload = function() { middleBotLoaded = true; };
    }


    document.getElementById("botzmiddleidlesequence_iframe").src = APP_BASE_URL + "blitzbotzidlesequence/blitzbotz/"+middleBotzId;
}
我们有一种方法来检查全局变量是否变为
true
,如果是,我们将删除加载屏幕。该方法将在500毫秒的
间隔内调用

setTimeout(_haveAllCharactersLoaded,500);

function _haveAllCharactersLoaded()
{
    if(middleBotLoaded == true)
    {
        $(jOverlay).fadeOut(800, function() {
            $(jOverlay).remove();
        });
    }
    else
    {
        setTimeout(_haveAllCharactersLoaded,500);
    }
}
问题是,即使在加载屏幕消失后,
iframe
内容也需要时间才能出现在屏幕上

我们已经观察到,持续时间取决于网络连接的速度,但是,没有使用
onload
来确保内容已加载

有没有其他办法来处理这个问题

谢谢


编辑:我必须等待两天才能开始悬赏,但我愿意将悬赏奖励给任何能为这个问题提供规范答案的人

我这里有两个答案

首先,我认为你应该重新考虑你编写这个游戏的方式,除非它是一个静态的、基于回合的、只依赖动画的游戏(想想口袋妖怪吧)

其次,我建议您尝试修复代码

第一个答案:


您询问是否有其他方法来处理此问题

我对此的第一反应是完全不使用iframe。AdobeEdge可能为您提供制作动画的好方法,但在游戏引擎中使用时,您只会发现自己在与AdobeEdge如何处理动画的设计作斗争

相反,我建议学习如何使用HTML5的画布元素。Canvas是用来处理动态加载的内容的(比如你的游戏引擎将要生成的内容)。我只能想象当游戏角色被武器击中时,将粒子效果动画叠加到游戏角色上的情况。根据您当前的方法,您会将其放在iFrame中吗?那么,如何确保将此粒子效果放置在对象上的正确位置

有很多资源可以帮助您开始学习在浏览器中创建真正的游戏引擎所需的代码。我建议从学习画布的工作原理开始。如果要使用DOM设置动画,请了解requestAnimationFrame

第二个答案:


我建议您研究一下您的MiddleBot的可变范围。这个答案()将是一个好地方

而不是使用
document.getElementById(“botzmiddleidlesequence_iframe”).attachEvent(“onload”,function(){middleBotLoaded=true;})
尝试使用
document.getElementById(“botzmiddleidlesequence_iframe”).attachEvent(“onload”,function(){parent.middleBotLoaded=true;})

或者,尝试以下方法:

加载事件:

document.getElementById("botzmiddleidlesequence_iframe").attachEvent("onload", function() { parent.middleBotLoaded();});
处理加载的函数:

function middleBotLoaded()
{
        $(jOverlay).fadeOut(800, function() {
            $(jOverlay).remove();
        });
}

直接调用事件比使用setTimeout轮询变量更改更好。

感谢您的详细回答。让我们看看是否还有更多的答案,然后给你奖金。再次感谢你,这对我不起作用。我想没有人会再回答了,他们会赏金的。谢谢你的帮助!harsha,我建议学习一些关于Javascript作为一种语言的教程,在进一步开发之前,从代码的角度来规划游戏。在游戏中,你总是受到编码能力的限制。有一个强大的代码库可以让你建立一个好的,丰富的游戏,我会先做这件事,然后做你的动画和图形。