Есть ли способ заставить рендеринг / обновление всех элементов страницы (даже тех, которые находятся вне экрана) в Mobile Safari?
Я создаю приложение с использованием PhoneGap и испытываю проблемы с iOS при попытке обновить номер с помощью JS, который находится в элементе DOM, «хранящемся» вне экрана. Элемент находится внутри HTML-кода, но располагается за пределами экрана до тех пор, пока не будет нажата кнопка. Когда я нажимаю кнопку, чтобы показать номер, элемент снова появляется снова.
Я заметил, что Mobile Safari любит отображать элементы страницы (или даже разделы элементов) так, как они видны на экране. Например, вы можете увеличить изображение, и оно будет отображать только ту часть, которая видна, а если вы прокрутите другой раздел, который не был виден, то теперь начнется его рендеринг (что требует времени).
Я просто заменяю содержимое новой строкой (числом), но если находится вне экрана, оно, похоже, не обновляется, пока я не вызову его на экране, что затем занимает дополнительное время для обновления .
Есть ли какое-то исправление / обходной путь к этому или я должен попытаться спроектировать это в будущем? Мне кажется странным, что я не могу динамически менять элементы за кадром и вытаскивать их обратно на экран при необходимости ...
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 выполняет рендеринг страниц.