2012-02-11 5 views
0

私は1ページのWebサイトで作業しています。ユーザーがメニュー項目をスクロールまたはクリックすると、メニュー項目が強調表示されます。1ページのサイトでナビゲーションを自動選択する

私は現在しようとしている方法は次のとおりです。

<nav> 
    <div class="menu"> 
     <ul> 
      <li><a href="#about">About</a></li> 
      <li><a href="#what">What I Do</a></li> 
      <li><a href="#work">Work</a></li> 
      <li><a href="#contact">Contact</a></li> 
     </ul> 
    </div> 
    </nav> 

私はこのjQueryのをしようとしているが、CSSで.selectedをアクティブにしていないようですか?

$(function(){ 
     var path = location.pathname.substring(1); 
     if (path) 
      $('nav a[href$="' + path + '"]').attr('class', 'selected'); 
    }); 

CSS

.selected { 
    color: #f9b950; 
    font-weight: bold; 
} 

おかげ

答えて

0

location.pathnameは、ハッシュが含まれていません。代わりにlocation.hashを使用する必要があります。
また、selectedクラスを前の要素から削除することを忘れないでください。

[href="value"]セレクタは要素の正確な属性値を選択します。解決されたURIは選択されません。そのため、a[href$="#hashere"]の代わりにa[href="#hashhere"]を使用することができます。

hashchangeイベントは、#の変更を検出するために使用できます。

function doSomethingWithHash() { 
    var path = location.hash; 
    var as = $('nav a[href="' + path + '"]'); 
    if (as.length) { 
     $('.selected').removeClass('selected'); 
     as.attr('class', 'selected'); // not .addClass('selected'); //? 
    } 
} 
$(doSomethingWithHash); // = document.ready 
$(window).bind('hashchange', doSomethingWithHash); // When navigating 

これが問題を引き起こすことはありませんが、あなたはそれを考慮しなければなりません:

  • .attr('class', 'selected')は以前のすべてのクラスを削除し、selectedからclassを設定します。
  • .addClass('selected')は、クラス名のセット(まだ存在しない場合)にselectedを追加します。以前のクラスは削除されません。
+0

ありがとうございました。Robとxdazzですが、私はまだそれに多くの運がありません。私はFirefoxで上記を試しましたが、何も変わっていないように見えましたが、Safariで変更を適用すると、ページのコードはすべてhttp://pastebin.com/9wMisKDLのようになります – Nsokyi

+0

@Nsokyi私は自分の答えを編集しましたハッシュ変更の検出を含めることができます。私はスクロールリクエストを実装しませんでした。なぜなら、それは潜在的にユーザーエクスペリエンスに悪影響を及ぼします。 'scroll'イベントを' window'に束縛し、各要素がビューポート内にあるかどうかを['.offset()']で調べなければなりません。(http://api.jquery.com/offset/ )。 –

+0

ああ、私は、一種の参照してください...これは、私はちょっとあなたがこれらの人はそれも間違っていると思いますか? http://kiskolabs.com/#home(私は対立しようとしていません。私はあなたの考えを見ることに興味があります)ありがとう – Nsokyi

0

liのクリックイベントの場合。

$(function(){ 
    $('.menu li').click(function(){ 
     $(this).addClass('selected').siblings().removeClass('selected'); 
    }); 
}); 
+0

スクロールしている部分を把握するだけで、クリック側で動作するxdazzに感謝します。 – Nsokyi

関連する問題