2009-04-01 6 views
11

遅い接続でサイトビルドをテストしていて、残りのサイトがロードされてから最後に折りたたまれるまで、jQueryアコーディオンは長い間拡張されていることに気付きました。あまりにもかわいい。私はどのようにローディングプロセスで折り畳まれたままにしておき、クリックしたときだけ展開できるのだろうと思っていました。ロード中にjQueryアコーディオンを非表示にする

私は、accordionプラグインのスタンドアロン1.6バージョンで作業しています。

基本構造:

<div class="sidebar"> 
    <ul id="navigation" class="ui-accordion-container"> 
     <li><a class="head" href="#">1</a> 
      <ul class="sub"> 
       <li><a href="#">1a</a></li> 
       <li><a href="#">2a</a></li> 
      </ul> 
     </li> 
    </ul> 
</div> 

とスクリプト

jQuery().ready(function(){ 
    jQuery('#navigation').accordion({ 
     active: 'false', 
     header: '.head', 
     navigation: true, 
     animated: 'easeslide', 
     collapsible: true 
    });  
}); 

私はロード中に表示されてからそれらを保つためにCSSで要素を非表示しようとしましたが、達成されたものすべてが常にそれらを持っています隠されたこの事は少しスムーズに実行させる方法上の任意のアドバイスを事前に

#navigation{ 
    margin:0px; 
    margin-left: 10px; 
    padding:0px; 
    text-indent:0px; 
    font-size: 1.1em; 
    width:200px; 
    text-transform: uppercase; 
    padding-bottom: 30px; 
} 
#navigation ul{ 
    border-width:0px; 
    margin:0px; 
    padding:0px; 
    text-indent:0px; 
} 
#navigation li{ 
    list-style:none outside none; 
} 
#navigation li ul{ 
    height:185px; overflow:auto; 
} 
#navigation li ul.sub{ 
    background:url('../images/sub.jpg') no-repeat; 
    dispaly: block; 
} 
#navigation li li a{ 
    color:#000000; 
    display:block; 
    text-indent:20px; 
    text-decoration: none; 
    padding: 6px 0; 
} 
#navigation li li a:hover{ 
    background-color:#FFFF99; 
    color:#FF0000; 
} 

おかげで、アコーディオンを持つ:

はたぶん問題は、私は、サブメニューのそれぞれに背景画像を持っているCSSであります常に崩壊した。

-edit - 私は、Javascriptを使用していないユーザーにもナビにアクセスできるようにするための解決策を期待しています。

答えて

16

私はすべてのサイトで、この最初のことを行う:右bodyタグの後に、このJavaScriptでスクリプトタグを置く:

jQuery('body').addClass('js'); 

これはあなたにいくつかで異なります任意の要素のスタイルフックを与えますJavascriptを有効にしてすぐに起こります。

その他の回答には、残りの問題の解決策があります。

...の2つの「ベース」スタイルが必要です。次に、アコーディオンをdom.readyに適用する前にもう一度開きます。

EDIT:あなたはページの最後にはjQueryをロードしている(またはjQueryのを使用していない)場合は、このストレートJavaScriptのバージョンを使用することができます

<script type="text/javascript"> 
    var b = document.getElementsByTagName('body')[0]; 
    b.className+=b.className?' js':'js'; 
</script> 
0

私はUIアコーディオンを使用していませんが、jQueryを使用してアコーディオンを構築しました。スクリプトが行う唯一のことは、アコーディオンパネルの可視性を交互にすることです。だから、ページのロード時に1枚のパネルが表示されている場合は、おそらくあなたのようなCSSルールを使用してみてください。

ul.sub{ 
    visiblity:hidden; 
    display:none; 
} 
+0

はい:ページのロード時に1枚のパネルが表示されているのであれば、おそらく次のようなCSSルールを使用してみてください。 1つのパネルではなく、ページが読み込まれている間にすべてが展開されます。 – Zac

0

私は ロード中に表示されてからそれらを保つために CSSで要素を隠そうとしました達成されたすべては にあり、それらは常に隠されています。あなたはそれがCSSに隠されて作ってみるし、この実行しないのはなぜ

:。

のjQuery( '#ナビゲーションを')ショー()アコーディオン...

+0

応答をありがとう..それは働くだろうが、私は私の元の記事で言及に失敗したように..私はまだjavascriptがオフの場合にメニューが使用できる解決策を見つけることを試みている – Zac

4

コードの内部。 DOMが準備ができるまではjQuery.ready()は実行されません。したがって、しばらくの間可視になるように最終的に非表示になる要素は普通です。アコーディオンは、使いやすさのために部分的に、また、優雅な堕落のために部分的に設定されています。JavaScriptが無効になっていれば、コンテンツは見逃されません。

JavaScriptを使用しないでページが壊れてしまう危険がある場合は、その要素を非表示に設定してください。その後、.accordion()の直前にshow()を実行します。


これは互換性を維持するためのアイデアです。それは最小限にテストされており、コメントするために開いています。

だけで、あなたのCSSを残すが、あなたのJavaScript(jQuery.ready())の先頭にこれを追加します。

document.styleSheets[0].addRule(".yourclass", "display:none"); 

そうすれば、ページが構築されているとして、CSSのルールが設定されますあなたの隠された要素を隠す。その後、jQuery.ready()の内部では、アコーディオンを初期化する前に$(".yourclass").show()に呼び出して戻してください。

+0

ああ、それは私が意味した私の質問に追加、それを行う方法があって、まだjavascriptのないそれらのためにアクセス可能なナビゲーションを持っていれば..推測しない? – Zac

+0

zac、私は機能するかもしれない私のポストにいくつかのコードを追加しました。私はちょうどそのアイディアを思いついたので、いくつかのテストを使うことができましたが、それは私の目的のために完了しています。 – s4y

+0

うーん..良い解決策のように聞こえる。私はちょっと行き、何が起こるかを教えてくれるだろう。 – Zac

1

<スクリプトで直接アコーディオンをバインドして、ドキュメントの準備が整うのを待つのではなく、アコーディオン要素のすぐ下に配置します。

ページが「準備完了」になるまで待つのではなく、できるだけ早くアクティブにします(これはDOMContentLoadedイベントをサポートしないIEで特に長時間かかることがあるため、jQueryが待機する必要があります) onloadは、すべてのイメージとすべてがロードされた後にのみ起動します)。

アコーディオンの親要素を 'visibility:hidden'に設定し、スクリプトの初期化時に手動で 'visible'に戻します。しかし、JavaScriptをオフにしたブラウザではコンテンツがまったく表示されないため、理想的ではありません。

6

を私は一週間前にこの非常に問題に直面しました。私は、ディスプレイへのコンテナ設定:なしにして、それが適切な時に現れ作るためのjQueryを使用:

$(".accordion").show(); 
$(".accordion").accordion(); 
+0

とても簡単で、とても便利です!私はそれをもう一度試してみたが、それは決してうまくいかなかった... thx! – SchweizerSchoggi

+0

K.I.S.S ....私はそれが好きです – Chronozoa

0

私は多くのポータルサイト間でjQueryの要素(タブ、スライダー&アコーディオン)の数百を持っています。それぞれの非表示/表示スタイルの設定は現実的な選択肢ではありません。

jQueryが準備され、要素を構築してから本文を表示するまで、シンプルな方法で本体を非表示にします。私の主人で

body { 
    display: none; 
} 

jQuery.ready()の下部にはJavaScriptファイル、::1ティムが提案のように、私はCSSのソリューションを使用している

$(document).ready(function() { 
    $("body").show(); 
} 
0

私のマスタースタイルシートで

しかし、これは、javascriptを無効にしているユーザー(またはjavascriptをサポートしていないデバイス)のコンテンツを非表示にすることを意味します。私はJerphによって提供されたソリューションを共有することに感謝します。

1

のアクセシビリティに関しては、これを使用して注意してください:

body { 
    display: none; 
} 

場合は、何も表示されませんオフになっているJavaScriptを何らかの理由;)

0

私はUIのアコーディオンを使用していないが、I jQueryでアコーディオンを構築しました。スクリプトが行う唯一のことは、アコーディオンパネルの可視性を交互にすることです。私はそれを試してみましたが、その後、サブメニューは常に隠された述べたように

ul.sub{ 
    visiblity:hidden; 
    display:none; 
} 
関連する問題