2010-11-22 90 views
6

有没有办法在Mobile Safari上强制渲染/更新所有页面元素(即使是那些屏幕外)?在移动Safari上强制整页渲染?

我正在使用PhoneGap构建应用程序,并且在尝试通过位于“存储”屏幕外的DOM元素中的JS更新数字时遇到iOS问题。该元素位于HTML中,但位于屏幕外,直到按下按钮才需要。当我按下按钮显示数字时,元素重新出现需要一段时间。

我注意到,Mobile Safari喜欢渲染页面元素(甚至元素的部分),因为它们在屏幕上可见。例如,您可以放大图像,只渲染可见的部分,如果滚动到不可见的其他部分,现在将开始渲染(需要时间)。

我只是用一个新的字符串(一个数字)替换了一个< span>的内容,但如果屏幕没有更新,直到我在屏幕上调用它,然后需要额外的时间更新。

是否有任何修复/解决方法,或者我应该在未来尝试设计此方案?我觉得这是很奇怪的,我不能动态地改变屏幕外的元素并在需要时将他们拉回到屏幕上......

HTML:

<div class="menu_container" id="menu_menu">  
<p id="hit_pct"><span class="gold">100</span> Hit %</p> 
</div><!-- /#menu_menu --> 

menu_menu位于屏幕外的定位。然后它按下按钮。当menu_menu尝试滑入时,由于span元素不会首先出现,所以它会突然跳跃。然后缓慢渲染并完成幻灯片动画。

我尝试过不使用滑动动画,结果保持不变。元素渲染速度不够快,因此整个容器不会显示在合理的时间内。

JavaScript代码更新的元素:

if(aTilesHit == 0){ 
    pct = 100; 
}else{ 
    pct = Math.round((abTilesHit/aTilesHit)*100); 
} 
x$('#hit_pct').inner('<span class="gold">'+pct+'</span> Hit %'); 

的JavaScript打开的菜单:

animationsOn = false; //Halts the animations that will be behind the menu 
if(x$('.menu_button').hasClass('active')){ 
    close_menus(); 
}else{ 
    x$('#ingameMenus').css({'left':0}); //Positions the menu on screen 
    x$('.menu_container').removeClass('hidden'); //.hidden positions the element offscreen. It does NOT add display=hidden 
    x$('.menu_button').addClass('active'); 
} 

感谢, 乔丹

注:这不会对Android浏览器发生,所以我感觉它与Mobile Safari处理页面渲染的方式直接相关。

+0

“当我按下按钮来显示数字,它永远的元素出现。 “你可以发布按钮按下的行动代码和部分的HTML与此跨度? – atlavis 2010-11-22 21:41:25

回答

1

你说它位于屏幕外,你可以用display: none;来隐藏元素吗?

该元素的内容仍然可以通过JavaScript获得,但不会在屏幕上显示。