2010-11-22 66 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獲得,但不會在屏幕上顯示。