メニューをインクルードしているのでのリンクをルートパスで書きたいです。
「ページ1」外のページから「ページ1の#link(アンカーリンク)」にリンクさせるとうまくいくのですが、
「ページ1」内でメニューの#link(アンカーリンク)をクリックすると、「ページ遷移時js」が発動します。
そしてページ内リンクのアニメーションが効かずにアンカーに飛ばされます。
したいことは。
リンクのルートパスのまま、ページ外リンク、ページ内リンクで固定ヘッダーのズレ分のアンカーリンクをうまく動作させたいです。
ご教授ください。
<ul id="global"> <li><a href="/demo/sample/#link">ページ1</a></li> <ul>
下記を使い
ページ遷移時js
$(function() { // ハッシュリンク(#)と別ウィンドウでページを開く場合はスルー $('a:not([href^="#"]):not([target])').on('click', function(e){ e.preventDefault(); // ナビゲートをキャンセル url = $(this).attr('href'); // 遷移先のURLを取得 if (url !== '') { $('body').addClass('fadeout'); // bodyに class="fadeout"を挿入 setTimeout(function(){ window.location = url; // 0.8秒後に取得したURLに遷移 }, 500); } return false; }); });
ページ外リンク
var headerHeight = $('#head').outerHeight(); var urlHash = location.hash; if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, 500); }, 100); } $('a[href^="#"]').click(function() { var href= $(this).attr("href"); var target = $(href); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, 500); });
ページ内リンク
$(function () { var headerHight = 80; //ヘッダの高さ $('a[href^=#]').click(function(){ var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top-headerHight; //ヘッダの高さ分位置をずらす $("html, body").animate({scrollTop:position}, 550, "swing"); return false; }); });
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。