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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

JavaScript

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

jQuery

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

3491閲覧

下層ページからのアンカーリンクがうまく機能しなくてとても困っているので直したいです。FIREFOXはナビゲーションまで表示されません。

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

JavaScript

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

jQuery

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/08/24 05:01

編集2017/08/25 03:56

JS初心者のものです。
固定ヘッダーに関して質問させてください。

現在スクロールすると途中からナビゲーションが固定で付いてくるサイトを作っています。
基本的に1ページで、ナビゲーションにアンカーリンクをつけてその指定場所にスムーススクロールするといったよくあるサイトです。

一部下層ページがあり、下層ページのナビゲーションからTOPトップページのアンカーリンクを指定したところにすると、
アンカーリンクがうまく動作せず、ずれて表示されてしまいます。
また、firefoxに関しては固定ヘッダーが表示されず、ちょっとスクロールすると表示されてしまう状況です。

ここで詰まってしまい解決できないため質問させていただきました。
おそらくJSかCSS書き方が悪いと思いますので、皆様のお力を貸していただきたく思います。

JSは</body>直前で読み込ませております。

テストサイトとソースコード一式を下記に記載させていただきますので、お力添えをいただけますと非常に助かります。

--

(解決したのでソースコードは非表示にしました。ご協力ありがとうございました。)

--

ご協力何卒宜しくお願い致します。

(追記) FIREFOXではナビゲーションが表示されるようになりました。ご協力者さまありがとうございます。

// ================================================================== // ============================== 共通 ============================== // ================================================================== // WOW.jS new WOW().init(); // firefox用 ヘッダー固定 // $(window).load(function (){ // if(top.location.href.match(/\#projects$/)){ // top.location.href = "#projects" // } else if(top.location.href.match(/\#people$/)){ // top.location.href = "#people" // } else if(top.location.href.match(/\#company$/)){ // top.location.href = "#company" // } // }); // PC/SP条件分岐 var windowWidth = $(window).width(); var windowSm = 824; if (windowWidth <= windowSm) { // ================================================================== // ========== 横幅824px以下のとき(つまりスマホ時)に行う処理を書く ========= // ================================================================== $(function(){ //========== SP AREA START ==========// var windowWidth = $(window).width(); $(window).resize(function(){ var ww = $(window).width(); if(windowWidth != ww) { //リサイズ時に実行する処理 setTimeout(function() { //リロードする location.reload(); }, 200); windowWidth = ww; } }); // smooth scroll $('a[href^=#]').click(function(){ var headerHight = 36; //ヘッダの高さ var speed = 1000; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top-headerHight; //ヘッダの高さ分位置をずらす $("html, body").animate({scrollTop:position}, speed, "easeInOutQuad"); return false; }); // global navigation $(function(){ hTop = $('#gnavi').offset().top; }); $(window).scroll(function () { if($(window).scrollTop() > hTop + 0) { $('#gnavi').css('position', 'fixed'); $('#gnavi').css('top', '0px'); $('#gnavi').css('width', '100%'); $('#gnavi').css('text-align', 'center'); $('#gnavi').css('z-index', '12'); $('#gnavi').css('padding-top', '0px'); }else{ $('#gnavi').css('position', 'absolute'); $('#gnavi').css('top', '10px'); } }); //========== SP AREA END ==========// }); } else { // ================================================================== // ========== 横幅825px超のとき(タブレット、PC)に行う処理を書く ========== // ================================================================== $(function(){ //========== TABLET/PC AREA START ==========// // 画面幅が変わったらリロード var timer = false; $(window).resize(function() { if (timer !== false) { clearTimeout(timer); } timer = setTimeout(function() { //リロードする location.reload(); }, 200); }); // smooth scroll $('a[href^=#]').click(function(){ var headerHight = 53; //ヘッダの高さ var speed = 1000; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top-headerHight; //ヘッダの高さ分位置をずらす $("html, body").animate({scrollTop:position}, speed, "easeInOutQuad"); return false; }); // global navigation $(function(){ hTop = $('#gnavi').offset().top; }); $(window).scroll(function () { if($(window).scrollTop() > hTop + 0) { $('#gnavi').css('position', 'fixed'); $('#gnavi').css('top', '0px'); $('#gnavi').css('width', '1000px'); $('#gnavi').css('text-align', 'center'); $('#gnavi').css('z-index', '12'); $('#gnavi').css('padding-top', '0px'); }else{ $('#gnavi').css('position', 'absolute'); $('#gnavi').css('top', '70px'); } }); //========== TABLET/PC AREA END ==========// }); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

Firefoxで表示されないのは、ナビの位置調整処理がscrollイベントでしか呼び出されないためです。

javascript

1 // global navigation 2 hTop = $('#gnavi').offset().top;// この前後の$(function(){})は外す 3 4 $(window).scroll(function () { 5 if($(window).scrollTop() > hTop + 0) { 6 $('#gnavi').css('position', 'fixed'); 7 $('#gnavi').css('top', '0px'); 8 $('#gnavi').css('width', '1000px'); 9 $('#gnavi').css('text-align', 'center'); 10 $('#gnavi').css('z-index', '12'); 11 $('#gnavi').css('padding-top', '0px'); 12 }else{ 13 $('#gnavi').css('position', 'absolute'); 14 $('#gnavi').css('top', '70px'); 15 } 16 17 }).scroll();// 定義したイベント処理をさっそく呼び出す

こうすれば、初期表示時点でナビ位置調整処理が呼び出されますので、想定の位置にナビバーが表示されます。

アンカーリンクがうまく動作せず、ずれて表示

これはよくわかりません。PCのchromeとFirefoxで見た限りでは、特におかしな様子は見当たりませんでした。

投稿2017/08/24 05:45

zohnam

総合スコア1441

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

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

退会済みユーザー

退会済みユーザー

2017/08/24 07:27 編集

zohnamさま ご確認ありがとうございます! いただきました方法で行ったところ、firefoxでのヘッダーが表示されるようになりました! ありがとうございます! ただ、やはりアンカーリンクの方が直りません。私のPCではずれちゃいます。。 chromeもfirefoxも(特にfirefoxで)。 PROJECTSの下層ページから例えばPEOPLEを押すとずれ込んでいるのがのがわかるかと思います。 画面の縦幅を縮めながら確認するとわかりやすいのですが。 以下のフローでやると私が言いたいことが伝わるかと思います。 ----- PROJECTSの下層ページのナビゲーションからPEOPLEを押す ↓ TOPのPEOPLEにアンカーリンクで飛ぶ ↓ ずれている(TOPページの固定ヘッダーでPEOPLEを押すと移動するのでずれているのがわかります。) ----- JSかCSSの問題でしょうか。。 ご協力いただけますと幸いです。 何卒よろしくおねがいいたします。
zohnam

2017/08/24 09:05

ああ、なるほど。びみょ~にずれますね。 これは、トップでの#移動だとスムーズスクロール処理で飛んでいますが、下層からのジャンプ後の#移動だとブラウザの規定処理によって飛んでいるためです。 スムーズスクロールのほうは、固定ヘッダのためにちょっとずらしてる処理がありますので、その分ずれているのでしょう。 MNZさんのページの場合、各コンテンツでpadding-topに十分大きな数字が入っているようですので、スムーズスクロール時にヘッダ分のずらしが不要です。 $('a[href^=#]').click(function(){ var speed = 1000; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top; $("html, body").animate({scrollTop:position}, speed, "easeInOutQuad"); return false; }); これでうまくいくと思います。
退会済みユーザー

退会済みユーザー

2017/08/24 12:04

zohnamさま ご確認いただきましてありがとうございます! 教えていただいた方法で行いましたところ、MacのPCのchrome,safari,ie(ieはbrowserstackで確認しました)、iphone(chrome,safari,firefox)で正常に動作しました! ただ、PCのfirefoxでのみ何も変化がなく正常に動作しません。 こちらは何が原因なのでしょうか。firefoxのアドオンかプラグインか何かの原因でしょうか。。 zohnamさまの方では正常に動作されますでしょうか? あともう少しのところでお手間取らせてしまい大変申し訳ございませんが、ご協力いただけますと大変助かります。 何卒宜しくお願いいたします!
退会済みユーザー

退会済みユーザー

2017/08/24 12:40

zohnamさま 追記となりますが、firefoxの固定ヘッダー用のハックのjsを一時的にコメントアウトしておりましたが、それを解除したところ一瞬カクつきますが、正常に動作するようになりました!コメントで聞いたばかりなのにすみません! ですので、もしfirefoxでハックを使わないで正常に動作する方法がございましたらご教授いただけますと幸いです! 何卒宜しくお願いいたします!
zohnam

2017/08/25 00:20

firefoxだとページ移動後のハッシュ処理でその位置に移動してくれないから、改めてURLを入れ直すというハック処理ですね。 全てのブラウザの挙動を完全に一致させたいのなら、そもそもハッシュを使わないようにすることになって変更点が多すぎます。 現実的な妥協点を見出しましょう。 Firefoxでは表示後に一瞬でスクロール位置を切り替えるのが見苦しいわけですから、ここをスムーズスクロール処理にしてしまうのはどうでしょうか。 function ff_smooth(target){ var speed = 1000; var position = $(target).offset().top; $("html, body").animate({scrollTop:position}, speed, "easeInOutQuad"); } $(window).load(function (){ if(top.location.href.match(/\#projects$/)){ ff_smooth("#projects"); } else if(top.location.href.match(/\#people$/)){ ff_smooth("#people"); } else if(top.location.href.match(/\#company$/)){ ff_smooth("#company"); } });
退会済みユーザー

退会済みユーザー

2017/08/25 03:54

zohnamさま コメントありがとうございます! いただた方法でやってみましたが、うまく動かなかったので、スムーススクロールなしで行こうと思います!次実装する際にはこちらのソースコードを参考にさせていただきたいと思います! ですので、こちらの案件は完了ということでベストアンサーにさせていただきます! 本当にありがとうございました!
退会済みユーザー

退会済みユーザー

2017/09/11 18:46

@zohnamさま 以前こちら解決したのですが、残り僅かなところでまた別に解決できない問題が出てしまいました。 zohnamさまには何度も助けていただいたので、また助けを乞うのは大変申し訳なく思っておりますが、 最後に解決したいので、どうかお力お貸しいただけないでしょうか。 zohnamさまはこちらのサービスで一番良くしていただいている回答者さまなので、直接やりとりしたいくらい素晴らしいエンジニアさんだと思っております。 どうかご協力のほど、何卒宜しくお願い致します。 https://teratail.com/questions/91726
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問