🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

4299閲覧

WPでのページ外アンカーリンクが動かない

nmnm

総合スコア5

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/11/08 04:19

編集2019/11/25 09:09

テーマを自作。
ヘッダー内にあるナビゲーションのリンク先を
トップページ(front-pade.php)内でのアンカーリンクにしてます。
また、スムーススクロールと位置調整の設定をjQueryで行ってます。

前提・実現したいこと

記事単体のページ(single.php)にいる時にヘッダーをクリックすると
トップページのアンカーリンクに飛ぶようにしたいです。
またアンカーリンク先の位置調整の数値がリンク先によって異なるため以下のように記述したのですが
より短縮化できるなどありましたらご教授いただけますでしょうか。

発生している問題・エラーメッセージ

記事単体のページのページでヘッダーのリンクをクリックしてもページに移動しません。
表示は記事単体のページのままで、アドレスは(archives/記事番号#クリックしたリンクID)になっています。


トップページでのページ内リンク移動、スムーススクロールは動作してます。
上部へ移動するボタンは全てのページで動作してます。

jQuery

$(function() { //上部へ移動するボタン var pagetop = $('#page_top'); pagetop.hide(); $(window).scroll(function () { if ($(this).scrollTop() > 800) pagetop.fadeIn(); } else { pagetop.fadeOut(); } }); pagetop.click(function () { $('body,html').animate({ scrollTop: 0 }, 500); return false; }); }); $(function(){ //ページ内リンク1の処理 var urlHash = location.hash; if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top + 450; $('body,html').stop().animate({scrollTop:position}, 300,'swing'); }, 100); } $('a[href*="#hoge"]').on('click',function() { var href= $(this).attr("href"); var target = $(href); var position = target.offset().top + 450; $('body,html').animate({scrollTop:position}, 300, 'swing'); return false; }); }); $(function(){//ページ内リンク2の処理 var urlHash = location.hash; if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top + -30; $('body,html').stop().animate({scrollTop:position}, 300,'swing'); }, 100); } $('a[href*="#fuga"]').on('click',function() { var href= $(this).attr("href"); var target = $(href); var position = target.offset().top - 30; $('body,html').animate({scrollTop:position}, 300, 'swing'); return false; }); });

header.phpのナビ部分

<nav class="header_right"> <ul class="header_menu"> <li><a href="#hoge">ページ内リンク1</a></li> <li><a href="#fuga">ページ内リンク2</a></li> <li><a href="<?php echo esc_url( home_url('/') ); ?>event">イベント</a></li> </ul> </nav>

試したこと

wpプラグインの全てを停止、JavaScriptの停止

補足情報(FW/ツールのバージョンなど)

PHP/7.3.1
MySQL/5.7.25
作業環境/DreamWeaver2019・Google Chrome

デベロッパーツールでの確認

クロームで確認したところエラーは出ていませんが警告が22と表示されました。
ですが警告の内容がわからなかったので(添付のように表示されます)
イメージ説明
Firefoxのデベロッパーツールで確認すると

このサイトはスクロールに対して配置を固定する効果が使用されています。 これは非同期パンで正しく動作しない可能性があります。 詳細は https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects を参照し、 関連するツールと機能の議論に参加してください。

と警告部分に表示されました。Firefoxでもエラーは確認されませんでした。

デベロッパーツールでの確認(確認ミスのため修正)

クロームで確認したところエラーは出ていませんが警告が22と表示されました。
ですが警告の内容がわからなかったので(添付のように表示されます)
イメージ説明
Firefoxのデベロッパーツールで確認すると

~~このサイトはスクロールに対して配置を固定する効果が使用されています。 これは非同期パンで正しく動作しない可能性があります。 詳細は https://developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects を参照し、 関連するツールと機能の議論に参加してください。

と警告部分に表示されました。Firefoxでもエラーは確認されませんでした。

先ほどエラーはなかったと書きましたが間違いでした。
シングルページでアンカーリンクをクリックすると

TypeError: target.offset(...) is undefined

と表示されました。どちらをクリックしても同じエラーが出ます。

var position = target.offset().top + 450;
var position = target.offset().top -30;

に原因があると表示されます。
確認ミス申し訳ございません。

ご連絡遅くなってしまい申し訳ございません。
貼っていただいたURLでjsを記述し
ヘッダーのリンク頭に<?php echo esc_url(home_url( '/' )); ?>を追加、
以下のようにしました。

$(document).ready(function(){ //URLのハッシュ値を取得 var urlHash = location.hash; console.log(urlHash); //デバッグしてみる //ハッシュ値があればページ内スクロール if(urlHash) { //スクロールを0に戻しておく $('body,html').stop().scrollTop(0); setTimeout(function () { //ロード時の処理を待ち、時間差でスクロール実行 scrollToAnker(urlHash) ; }, 100); } //通常のクリック時 $('a[href*="#"]').click(function() { //ページ内リンク先を取得 var href= $(this).attr("href"); //リンク先が#か空だったらhtmlに var hash = href == "#" || href == "" ? 'html' : href; //スクロール実行 scrollToAnker(hash); return false; }); // 関数:スムーススクロール // 指定したアンカー(#ID)へアニメーションでスクロール function scrollToAnker(hash) { var target = $(hash); var position = target.offset().top; $('body,html').stop().animate({scrollTop:position}, 500,'swing'); } })
<li><a href="<?php echo esc_url(home_url( '/' )); ?>#hoge">hoge</a></li> <li><a href="<?php echo esc_url(home_url( '/' )); ?>#fuga">fuga</a></li>

ページ内、ページ外アンカーリンクは実装されました!ありがとうございます。
ですがページ内リンクでのスムーススクロールが実行されません。
console.log(urlHash);もページ外リンクでは#hoge、#fugaが表示されますが
topページだと何も表示されなくなってしまい以下のようなエラーが出ます。

jquery.min.js:2 Uncaught Error: Syntax error, unrecognized expression: http://localhost/jver/#hoge at Function.se.error (jquery.min.js:2) at se.tokenize (jquery.min.js:2) at se.select (jquery.min.js:2) at Function.se [as find] (jquery.min.js:2) at k.fn.init.find (jquery.min.js:2) at new k.fn.init (jquery.min.js:2) at k (jquery.min.js:2) at scrollToAnker ((index):58) at HTMLAnchorElement.<anonymous> ((index):51) at HTMLAnchorElement.dispatch (jquery.min.js:2)
jquery.min.js:2 Uncaught Error: Syntax error, unrecognized expression: http://localhost/jver/#fuga at Function.se.error (jquery.min.js:2) at se.tokenize (jquery.min.js:2) at se.select (jquery.min.js:2) at Function.se [as find] (jquery.min.js:2) at k.fn.init.find (jquery.min.js:2) at new k.fn.init (jquery.min.js:2) at k (jquery.min.js:2) at scrollToAnker ((index):58) at HTMLAnchorElement.<anonymous> ((index):51) at HTMLAnchorElement.dispatch (jquery.min.js:2)

どこをどうすればいいのかもわからなくなってしまいました。
スムーススクロールは諦めた方が良いでしょうか…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/11/08 05:37

Webブラウザのデベロッパーツールでエラーや何かメッセージは出ていますか?
guest

回答2

0

location.hashで取得した変数が本当に取得したいハッシュ値になっているかどうか
**console.log(urlHash);**で確認してみてください。#xxxxxxxxxとなっていないと、そのままセレクタに放り込んでもIDと認識してくれませんし、offsetメソッドが未定義というエラーが出ているなら、おそらくセレクタにならない値を指しているはずです。その場合はaタグに紐付いているhrefリンクそのものを入れないといけません。

js

1 var urlHash = location.hash; 2     console.log(urlHash); //デバッグしてみる 3 if(urlHash) { 4 $('body,html').stop().scrollTop(0); 5 setTimeout(function(){ 6 var target = $(urlHash); 7 var position = target.offset().top + -30; 8 $('body,html').stop().animate({scrollTop:position}, 300,'swing'); 9 }, 100); 10 }

ページ遷移時のページ内リンクのスムーススクロール

投稿2019/11/21 10:40

編集2019/11/21 10:43
FKM

総合スコア3647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リンクされてるのがアンカーだけになっているので、その前に飛ばしたいページのURLが必要になりますね。

html

1<nav class="header_right"> 2 <ul class="header_menu"> 3 <li><a href="<?php echo esc_url( home_url('/') ); ?>#hoge">ページ内リンク1</a></li> 4 <li><a href="<?php echo esc_url( home_url('/') ); ?>#fuga">ページ内リンク2</a></li> 5 <li><a href="<?php echo esc_url( home_url('/') ); ?>event">イベント</a></li> 6 </ul> 7</nav>

これで行けないですか?

投稿2019/11/08 08:50

8yazaki

総合スコア454

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nmnm

2019/11/08 09:18

回答ありがとうございます。 早速記述をしてみてシングルページからの アンカーリンクのスムーススクロールでの移動はできました。 ですがトップページのアンカーリンク移動時のスムーススクロールが動かないのと、 アンカーリンクがURLに付加される状態になってしまいました… Firefoxのデベロッパーツールでは Syntax error, unrecognized expression: と記述されてます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問