javascript - 强制在 Mobile Safari 上呈现整页?

标签 javascript dom performance mobile-safari cordova

有没有办法在 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 处理页面呈现的方式直接相关。

最佳答案

这可能是移动版 Safari 的已知渲染问题。可以通过使用以下 CSS 规则触发硬件加速来强制渲染:

-webkit-transform: translate3d(0,0,0)

在这个问题中讨论:iPad Safari scrolling causes HTML elements to disappear and reappear with a delay

关于javascript - 强制在 Mobile Safari 上呈现整页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249392/

相关文章:

jquery - 使用 jQuery 寻找合适的父级

javascript - 从单个 anchor 标记传递大量数据

javascript - 如何隐藏 AJAX 调用生成的 DIV?

javascript - Nodejs MySQL 循环中的多个查询

javascript - 将 .each() 绑定(bind)到动态添加的元素

mysql - XML 插入性能到 MYSQL

javascript - React 组件不会映射数组

c# - 如何从 C# 中的代码构建 HTML

performance - 为什么不能应用遍历数组? (或者是吗?)

c++ - 如何以最快的方式检查给定的数字是否可以被 15 整除?