6

jQueryUIタブを使用しています。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>
4

5 に答える 5

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の後で実行されることによるスタイルのないコンテンツのフラッシュ)を防ぎます。

于 2012-06-01T13:02:21.517 に答える
5

これが私がすることです。のクラスをno-jshtmlタグに配置し、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このメソッドを使用すると、必要に応じてタグに他のクラスを含めることができます。no-jsjsが有効になっていないページのスタイルでクラスを使用します。

スタイルの例:

#container {
  display:none;
}
.no-js #container
{ 
  display: block;
}
于 2012-06-01T13:07:35.773 に答える
2

あなたはこのようにそれを行うことができます:

<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>
于 2012-06-01T13:03:30.847 に答える
1

負荷時のちらつきを解決するための上記のアイデアに感謝します。ブラウザはできるだけ早くマークアップをレンダリングしようとするため、jquery-uiタブなどの一部の(巨大な)jquery-uiコンテンツ要素ではこれを回避する必要があります。

この解決策は私のために働きます:

<html>
...
  <head>
  ...
    <script>
      $(document).ready(function() {
        $("#tabs_container").tabs();

        // force *initialized* #tab_container to be displayed
        $("#tabs_container").show();
      });
    </script>
  </head>
  ...

  <body>
    ...
    <!-- avoid unstyled tabs to be displayed using "display: none" at markup -->
    <div id="tabs_container" style="display: none;">
      <!-- (huge) tabs content -->
    </div>
    ...
  </body>
</html>
于 2015-09-23T08:03:59.890 に答える
0

あなたはそれをこのように試すことができます:

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

コンテナはロード時に非表示になり、ドキュメントの準備ができてタブが完成したら、コンテナを表示できます。

于 2012-06-01T13:07:11.890 に答える