前提・実現したいこと
WordPressで各投稿ページを「http://○○.jp/カテゴリ/投稿.html」となるように設定しています。
コメントとトラックバックはタブで切り替えて表示するようにしました。コメント(#commentsBody)トラックバック(#trackbacksBody)にはそれぞれアンカーリンクでアクセスすることができます。
ページ内はスムーズスクロールで移動するようにプログラムしています。スムーズスクロールはhrefが“#”で始まるaタグをクリックすると発動し、実行後は[return false;]でaタグの機能を無効化するようにしました。
コメントとトラックバックをタブ切り替えにしていることから別ページから非表示になっているタブに
アクセスする際にエラーを起こさないよう、別のプログラムも設置しました。
最終的には、コメント/トラックバックにアクセスする際にもブラウザのURL欄にはアンカータグのついていない状態のアドレスを表示しておきたいと考えております。
投稿ページ内からはコメント/トラックバックに問題なくスムーズスクロールで移動し、移動後もURLにアンカータグが付くことはありません。希望通りの動作をしており特に問題は起きていません。
発生している問題・エラーメッセージ
問題は別のページからコメント/トラックバックに移動する時に発生します。
記事一覧ページやサイドバーからコメントへのリンクをクリックすると該当ページには遷移しますが、その後コメント/トラックバックへは移動してくれません。
該当のソースコード
jQuery
1jQuery(document).ready(function($){ 2 //URLアンカーを取得してタブ切り替え後に移動 3 $('a.tabChack').click(function(e){ 4 //URLを変数に代入 5 var urlName = $(this).attr("href"); 6 //aタグの機能を無効化 7 e.preventDefault(); 8 //表示したいURLでページ遷移 9 location.href = urlName.replace(/#.*/, ""); 10 //アンカータグを取得してハッシュを追加(urlHash[1]に収納) 11 var urlHash = urlName.split('#'); 12 urlHash[1] = "#"+urlHash[1]; 13 //タブ切り替え後にスムーズスクロール移動 14 var tab = document.getElementsByName( "tabNav" ) ; 15 if(urlHash[1]=="commentsBody") tab[0].checked = true; 16 else if(urlHash[1]=="trackbacksBody") tab[1].checked = true; 17 var target = $(urlHash[1]).offset().top; 18 $('html,body').animate({scrollTop : target}, 700, 'swing'); 19 }); 20});
試したこと
ページ遷移完了しないうちに次のプログラムを実行してしまっているため、タブ切り替え後のスムーズスクロールができないのではないかと思い、下記のプログラムも試してみたのですが、今度はページ遷移→コメント/トラックバックまでスムーズスクロール→画面再表示により一番上まで戻ってしまいます。
jQuery
1jQuery(document).ready(function($){ 2 var urlHash = location.hash; 3 var tab = document.getElementsByName( "tabNav" ) ; 4 if(urlHash){ 5 if(urlHash=="#commentsBody") tab[0].checked = true; 6 else if(urlHash=="#trackbacksBody") tab[1].checked = true; 7 var target = $(urlHash).offset().top; 8 $('html,body').animate({scrollTop : target}, 700, 'swing'); 9 location.href = location.href.replace(/#.*/, ""); 10 } 11});
何か解決方法はありませんでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。