如何防止jQuery onload闪烁不引人注目?

时间:2012-06-01 13:00:01

标签: jquery tabs load flicker unobtrusive

我正在使用jQuery UI标签。我应该如何防止加载内容的闪烁,同时确保在禁用javascript时内容可见?

我已经尝试在加载文档时向主体添加.js类,但是当添加的类同时加载选项卡时,仍然会闪烁内容。

#container{display:none;}

<div id="container">
  <div id="tabs">
    <ul>
      <li><a href="#tabs-1">Nunc tincidunt</a></li>
      <li><a href="#tabs-2">Proin dolor</a></li>
    </ul>
    <div id="tabs-1">
       <p>Tab 1</p>
    </div>
    <div id="tabs-2">
      <p>Tab 2</p>
    </div>
  </div>
</div>
<script>
$(document).ready(function(){
  $('#tabs').tabs();
  $('#container').show();
});
</script>

5 个答案:

答案 0 :(得分:5)

<html class="nojs">
  ...
  <head>
     <script>
       document.documentElement.className = "js";
     </script>
  </head>

  ...
  <style>
  #container {display:none;}
  .nojs #container { display: block;}
  </style>

即使您的设备上没有js,这也会使您的内容可见。这种方法与H5BP + Modernizr几乎相同,并且除了好处之外,它将阻止JS FOUC(由于js稍后执行而导致无格式内容的闪现)。

答案 1 :(得分:5)

这就是我的工作。在您的html标记上放置一个no-js类,然后在html标记之后放置以下代码:

<script>
    // Sets 'js' on html element and removes 'no-js' if present (here to prevent flashing)
    (function(){
        document.documentElement.className = document.documentElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + (' js '); 
    })();
</script>

如果需要,此方法允许您在html标记上包含其他类。对于未启用js的页面,请使用样式中的no-js类。

样式示例:

#container {
  display:none;
}
.no-js #container
{ 
  display: block;
}

答案 2 :(得分:1)

你可以这样做:

<div id="container">
  <div id="tabs">
  <script>$('#tabs').addClass('js');</script><!-- added this line -->
    <ul>
      <li><a href="#tabs-1">Nunc tincidunt</a></li>
      <li><a href="#tabs-2">Proin dolor</a></li>
    </ul>
    <div id="tabs-1">
       <p>Tab 1</p>
    </div>
    <div id="tabs-2">
      <p>Tab 2</p>
    </div>
  </div>
</div>
<script>
$(document).ready(function(){
  $('#tabs').tabs().show(); // changed this line
  $('#container').show();
});
</script>

答案 3 :(得分:1)

感谢上述想法来解决负载闪烁问题。 当浏览器尝试尽快呈现标记时,对于某些(巨大的)jquery-ui内容元素应该避免使用jquery-ui Tabs。

此解决方案适用于我:

.modal-body {
    margin-bottom: 100px;
}

答案 4 :(得分:0)

你可以这样试试:

<script>
$("#container").hide();
$(document).ready(function(){
  $('#tabs').tabs();
  $('#container').show();
});
</script>

容器在加载时是隐藏的,当文档准备好并且标签完成后,您可以显示容器。