質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

2982閲覧

ページ内のidにリンクで飛んだときの処理がうまくいかない

sodiumplus3

総合スコア71

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/02/01 22:59

###困っていること

https://haniwaman.com/page-link-position/

上のページのコードをお借りして下のようなページを作りました。

html

1 2 3<!DOCTYPE html> 4 5<html> 6 <head> 7 <link rel="stylesheet" href="./test.css"> 8 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 9 </head> 10 <body> 11 12 13 <a href="#id1">見出し1</a> 14 15 16 17 <h2 id="id1">小見出し</h2> 18 <script src="./script.js"></script> 19 </body> 20</html> 21

css

1body { 2 height: 1500px; 3} 4

jQuery

1jQuery( window ).on( 'load', function() { 2 id = location.hash; 3 speed = 0; 4 headerHight = 128; // 固定ヘッダーの高さ 5 if ( '' != id ) { 6 pos = jQuery( id ).offset().top - headerHight; 7 jQuery( 'html' ).animate({ scrollTop: pos }, speed ); 8 } 9});

このとき、「見出し1」から「小見出し」に飛んだときページ内で紹介されているようなロード後小見出しが下にずれる挙動になりません。原因はなんでしょうか?

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

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

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

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

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

sodiumplus3

2020/02/02 07:37

問題箇所だけ抜き出した仮のコードなのでできればJavaScriptで解決したさはあります。 また、確認できなかったとのことですが、僕の方ではそのリンクでも正しい挙動が確認できませんでした…(小見出しにとんでもその後何も起こらない)
退会済みユーザー

退会済みユーザー

2020/02/02 07:38

失礼。 勘違いしていた様です。
guest

回答2

0

たとえば、javascriptを反映させず urlにハッシュを付けてアクセスするだけで、ジャンプしてくれます.speedを0とされているので、固定ヘッダーがない場合、javascript使う意味がないように思います。

参考としては、jQueryのanimateを調べてみてください。durationという値が0に指定されているということになります。細かいことを言うとspeedという命名をされていますが、実際は数字が大きくなればなるほど遅いアニメーションになります。


https://www.xxxxx.com/xxxxxx/XXXXX.html#id1

・方法1 : javascriptを読み込まないようにし、ハッシュ付きurlにアクセスします。上記例のURLのように、最後にハッシュ(#id1)を付ける。参考サイトではこれを前提に書かれている。そして、ご掲示のjavascriptの処理を反映させない。下記では、javascriptファイルを読み込んでいません。

html

1<!DOCTYPE html> 2 3<html> 4 <head> 5 <link rel="stylesheet" href="./test.css"> 6 </head> 7 <body> 8 9 10 <a href="#id1">見出し1</a> 11 12 13 14 <h2 id="id1">小見出し</h2> 15 16 </body> 17</html> 18

次に、そもそも、javascript(今の場合、jQueryと記載されたもの)の記述では、固定ヘッダーがないのに固定ヘッダーの値が設定されているので、ご掲示のコードだとジャンプ先が近いため負の値になり、動かないように見えるということです。

・方法2
固定ヘッダーがないので、固定ヘッダーに対する記述を削除する。アクセスは方法1と同様。

jQuery

1jQuery( window ).on( 'load', function() { 2 let id = location.hash; 3 let speed = 0; 4 if ( '' != id ) { 5 let pos = jQuery( id ).offset().top; 6 jQuery( 'html' ).animate({ scrollTop: pos}, speed ); 7 } 8});

固定ヘッダーをのちに追記するのであれば、headerHightについての記述を元に戻すとよいです。もちろん高さは任意で決めるなり、動的に取得するなりしてください。

方法1,2は同時に反映させても意味がないので注意です。方法1が有効になります。方法2はご掲示のコードのjQueryだけ書き換えた場合と考えてください。

ただし、jQueryのanimateの動作については個人的に詳しくありません。

最後に、Webの開発では、必ずブラウザの機能であるデベロッパーツールを使い、動かしているコードをチェックしましょう。ブラウザを立ち上げて確認したいwebページを開き"F12"を押すと使えるようになります。

デベロッパーツールの使い方はネット上で調べてください。
検索例 firefox デベロッパーツール デバッグ

ほかに質問内容と関係ない細かいこともありますが、とにかくコードを参考にするのは良いですが、1行1行何をしているのか説明文が書けるくらいに理解す

投稿2020/02/05 03:18

Yasuhiro

総合スコア46

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

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

Yasuhiro

2020/02/05 04:19

意味は通じそうですが、回答が最後切れてしまっていました。失礼しました。
guest

0

setTimeout() で改善しますが、この場合は変数の値を少し増やすだけでいいかと思います。

JavaScript

1 //speed = 0; 2 speed = 16;

関連: https://teratail.com/questions/200486

投稿2020/02/03 04:44

x_x

総合スコア13749

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

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

sodiumplus3

2020/02/04 19:19

すみません、治りませんでした。ページ内リンクにとんでも特にその後小見出しがずれたりということが起こりません。
x_x

2020/02/05 00:23

もしかして「同じページ内」のリンクを想定していますか? 参考サイトにある通り「ページ遷移時」限定の話ですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問