即使在检查onload事件javascript时,iframe内容也不会出现在屏幕上
我们正在尝试构建一个HTML游戏,其中即使在检查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(
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作为一种语言的教程,在进一步开发之前,从代码的角度来规划游戏。在游戏中,你总是受到编码能力的限制。有一个强大的代码库可以让你建立一个好的,丰富的游戏,我会先做这件事,然后做你的动画和图形。