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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

846閲覧

ハッシュを持ったURLにアクセスした際、id="hogehoge"までスクロールする機能を実装したい

KoutaWatanabe

総合スコア8

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2021/07/02 10:34

前提・実現したいこと

jQuery、JSの初学者です。

URL例:https://hogehoge.com/index.html#hogehoge

  • 上記のようなハッシュを持ったURLにアクセスした際、id="hogehoge"までスクロールする機能を実装したいです。
  • ヘッダーをfixedで固定さているため、#hogehogeにヘッダーが被らないようにしたい。

いろいろ試した結果、以下のソースコードになりました。

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

Win10 Firefoxでは動きますが、Android Google Pixel 3aのFirefoxで検証した結果、PCとは違う挙動になってしまいました。

Win10 Firefoxの検証にてコンソールを見たところ(iPhone 6/7/8サイズ)、変数targetの値が上手く取得できていないようでした。

該当のソースコード

jQuery

1$(window).on('load',function(){ 2 let id = $( location ).attr('hash'); 3 let height = $(".date-list").height(); 4 if(id){ 5 let target = $(id).offset().top - height - 120; 6 $('html,body').animate({scrollTop: target}, 'swing'); 7 console.log(target); 8 } 9});

参考にしたサイト

【jQuery】ページ遷移後に特定の要素の位置までスクロールする
https://into-the-program.com/scroll-after-loading/

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

OS

  • Win10
  • Android Google pixel 3a

ブラウザ

  • Firefox

エディタ

  • Visual Studio Code

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

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

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

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

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

runnynose

2021/07/02 10:57

> console.log(target); ちゃんとデバッグ入れてますね☺️ targetで取れてなければさらに細かく見てみてどこでうまくいっていないかを見れば良いと思いますけど! 例: console.log($(id)); console.log($(id).offset()); console.log($(id).offset().top); console.log(height);
KoutaWatanabe

2021/07/02 12:00 編集

ありがとうございます。あらためて検証してみたところ以下のような結果になりました。 (ページ最上部でリロード、Win10 Firefox iPhone 6/7/8サイズで検証) 結果、offsetが取得できてないようです… > console.log($(id)); Object { 0: div#hogehoge.speaker, length: 1, context: HTMLDocument http://127.0.0.1:5500/index.html#hogehoge, selector: "#hogehoge" } > console.log($(id).offset()); Object { top: 0, left: 0 } > console.log($(id).offset().top); 0 > console.log(height); 63(高さは取得できております。)
KoutaWatanabe

2021/07/02 12:03

ページの途中までスクロールしてリロードするとその位置のoffsetの数値は取得しているのですが、 #hogehogeには移動せず、その場でリロードを繰り返すと上に徐々に(- height - 120の分だけ?)ずれていってしまいます…
guest

回答1

0

自己解決

自己解決しました。
レスポンシブのためHTML内にidを重複して書いていたため、スマホにした際もPCのidを取得しに行くが、display:none;で高さが取得できない状態でした。

HTML

1<div id="hogehoge" class="sp-none"> 2 <p>PCテスト</p> 3</div> 4<div id="hogehoge" class="pc-none"> 5 <p>SPテスト</p> 6</div>

単純に以下にしました。

HTML

1<div id="hogehoge"> 2 <div class="sp-none"> 3 <p>PCテスト</p> 4 </div> 5 <div class="pc-none"> 6 <p>SPテスト</p> 7 </div> 8</div>

投稿2021/07/02 13:55

KoutaWatanabe

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問