jQuery のスムーススクロールと、画像スライダーなど何らかの要素と競合した際の対処方法を紹介します。例えば縦長のランディングページを作成した際に、スムーススクロールの <a href="#"> 要素と、flexslider のナビゲーションの矢印 <a href="#"> が競合し、ナビゲーションのネクスト、プレビューの矢印を押すと、スムーススクロールの要素と競合してしまいます。
flexslider など、挿入される要素が js のライブラリ内に書かれている場合、クラスを指定して競合を除外する方法があります。以下は通常のスムーススクロールです
// 通常のスムーススクロール $(function(){ $('a[href^="#"].click(function(){ var speed = 500; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top; $("html, body").animate({scrollTop:position}, speed, "swing"); return false; }); });
flexslider で競合してしまう、除外したいクラス a.flex-next、a.flex-prev を指定すると
// 指定クラスを除外したスムーススクロール $(function(){ $('a[href^="#"]:not(a.flex-next,a.flex-prev)').click(function(){ var speed = 500; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top; $("html, body").animate({scrollTop:position}, speed, "swing"); return false; }); });
のように冒頭の :not(a.flex-next,a.flex-prev)’) で、:not(〜) 内に除外するクラスを記述することで競合を除外することが可能です。
〒150-0002
東京都渋谷区渋谷2-7-14 VORT青山 5F
メールでのお問い合わせはこちらから
webfactory.tokyo