タブ+スムーズスクロール=バッティング
2012年02月17日前回と同様、またもやタブに悩まされました。
今回はタブを切り替ると
aが#の時(ページ内リンク)、反応するスクロールが邪魔してくるという件です。
こんな感じで、画面から切れてしまっているタブ。
こちらをクリックすると・・・
スムーズスクロールが反応し、
強制的にタブエリアごと上にスクロールしてしまう。
一見便利に思えますが、
たくさんのタブエリアが存在しているページだと
すこしうざったらしく思えます。
スムーズスクロールは機能させたまま、
その機能からタブだけ除外する!
そんないい方法はないのかと模索したところ。
数行で解決できることが判明!
まず、スクロールの記述の上に
$(function(){
$('.タブエリア').find("a").addClass('適当なクラス名');
});
このような、タブのエリアのa要素にクラスを追加させます。
そして次にスクロールにこちらのフィルタを追加。
('a:not(.適当なクラス名[href*=#]')
こちらは先ほどつけたクラスがついている
要素は選択しないという意味です。
たったこれだけでスクロールとタブの機能の
バッティングを防ぐことができました。
上記のフィルタにもJQueryにはたくさんの
フィルタがあります。
スクリプト同士がバッティングして困ったときは
まずフィルタを駆使して解決法を導いてみることにします。
参考:
http://alphasis.info/2011/10/jquery-api-jquery-not/




