jQuery
Tips
jQueryスムーズスクロールでメニューの挙動がおかしくなった場合とjQuery2.2で動かない場合の対応
当たり前のように使うことが多いスムーズスクロールですが、jQueryのslicknavを使用した際にボタンクリックで常にページTOPに戻ってしまうようになりました。前にもこんな事あったなと思いつつ...jQuery2.2(1.12)でjQueryが動かなくなった人にも役立つかもしれません。
参照元:
jQuery スムーズスクロール
使用しているスムーズスクロールはこちら。
$(document).ready(function () { //スムーズスクロール $('a[href^=#]' ).click(function() { // スクロールの速度 (ミリ秒) var speed = 400; // アンカーの値取得 var href= $(this).attr("href"); // 移動先を取得 var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール $('body,html').animate({scrollTop:position}, speed, 'swing'); return false; }); });
:not(selector)を使って指定した要素を除外する
参照元を見ていただければ万事解決ですが、それではメモの役目も果たしていないので...。スムーズスクロールの最初の部分の指定方法が、ページ内のアンカーリンク全てだという事が問題のようです。今回はslicknavのボタンと今後タブを作る際にも使える汎用の class を除外します。
$('a[href^=#]' ).click(function() {
.click する対象から class の .slicknav_btn と .non-scrollを除外しています。
$('a[href^="#"]' + 'a:not(.non-scroll)' + 'a:not(.slicknav_btn)').click(function() {
jQuery2.2(1.12)で動かない場合の対応
jQueryの新しいバージョンでは上記のスムーズスクロールではエラーがでて動かないようです。#を"#"で囲うと動作するようになります。
$('a[href^="#"]' ).click(function() {