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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

jQuery

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

Q&A

0回答

2088閲覧

途中から固定ヘッダーになる場合のアンカーリンクのずれを解消したい

korokorota

総合スコア40

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

jQuery

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

1グッド

1クリップ

投稿2019/12/25 11:16

編集2019/12/25 11:39

一定量スクロールしたらヘッダーが固定されるようにしてます。
その場合の、アンカーリンクのズレの解消方法が解らなくて困っています。

一定量スクロールでヘッダー固定の記述

$(function(){ var windowWidth = $(window).width(); var windowSm = 767; if (windowWidth > windowSm) { //横幅767px超のとき(タブレット、PC)に行う処理を書く var _window = $(window), _header = $('header'), heroBottom; _window.on('scroll',function(){ heroBottom = 500; if(_window.scrollTop() > heroBottom){ _header.addClass('fix'); } else{ _header.removeClass('fix'); } }) _window.trigger('scroll'); } else { //横幅767px以下のとき(つまりスマホ時)に行う処理を書く $(function(){ if(window.innerWidth < 767){ $('header').removeClass('fix'); }else { } }); } });

アンカーリンクのズレ解消用記述

**別ページのアンカーリンクへスムーズスクロールで移動しつつ、fixedナビの高さ分を自動でマイナスもするjQueryコード – 0017 **
https://0017.org/1789.html

こちらのサイトを参考にさせていただいたところ
他ページからのアンカーリンクはズレずに表示されるのですが、
同じページからのアンカーリンクの場合ズレてしまいます。

$(function() { var headerHeight = $('header').outerHeight(); //fixedのヘッダーの高さを取得 var urlHash = location.hash; //URLハッシュを取得 var animeSpeed = 500; //スクロールのアニメーションスピード if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, animeSpeed); }, 100); } $('a[href^="#"]').on({ 'click': function(){ var href= $(this).attr("href"); var target = $(href); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, animeSpeed); } }); });

変更した内容

$(function() { if ($('header').css('position') !== 'fixed') { headerHeight += headerHeight; } var headerHeight = $('header').outerHeight(); //fixedのヘッダーの高さを取得 var urlHash = location.hash; //URLハッシュを取得 var animeSpeed = 500; //スクロールのアニメーションスピード if(urlHash) { $('body,html').stop().scrollTop(0); setTimeout(function(){ var target = $(urlHash); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, animeSpeed); }, 100); } $('a[href^="#"]').on({ 'click': function(){ var href= $(this).attr("href"); var target = $(href); var position = target.offset().top - headerHeight; $('body,html').stop().animate({scrollTop:position}, animeSpeed); } }); });

**JavaScript - javascript、offset().topの値が、固定ヘッダーの前と後でずれてしまう|teratail **https://teratail.com/questions/182348
こちらを見て途中から固定になるのが原因だと思って、
こちらを参考にさせていただき、書き直してみましたが変わりませんでした。

teratailの質問されていた記述を下記のようにして試してみたところ
アンカーリンクのズレはなくなったのですが、固定ヘッダーが効かなくなってしまいました。

$(function () { if ($('header').css('position') !== 'fixed') { headerHeight += headerHeight; } $('a[href^="#"]').click(function () { //ヘッダーの高さを取得 var headerHeight = $('.scroll-header').height(); console.log(headerHeight); //アンカーの値取得 var href = $(this).attr("href"); //移動先ターゲットを取得 var target = $(href == "#" || href == "" ? 'html' : href); console.log(target); //ターゲットの座標を取得 var target_offset = target.offset().top; console.log(target_offset); var position = target.offset().top - headerHeight; //ヘッダの高さ分位置をずらす $("html, body").animate({ scrollTop: position }, 400, "swing"); return false; }); });

全くの初心者のため、自分では解決出来そうにありません。
どなたかご教授いただけないでしょうか。
よろしくお願いいたします。

takuhito_hihara👍を押しています

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問