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

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

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

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

HTML

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

CSS

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

Q&A

解決済

2回答

2209閲覧

jQueryで追従機能を設置、ウィンドウの高さが狭いときはどこまでもスクロールができてしまい困っております

holic

総合スコア134

jQuery

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2017/06/12 11:50

編集2017/06/14 04:06

###前提・実現したいこと
2カラム構造のページを作成しております、左側にはコンテンツ領域を右側にはサイドバー領域を設けましたが、このサイドバーを追従メニューにしようと思い、jqueryを使って実装しました。しかし、ウィンドウ幅が狭い場合はどこまでもスクロールができてしまう事態が発生してしまいました。
イメージ説明

###該当のソースコード

html

1<div id="wrap"> 2 <div class="inner"> 3 <div id="main"> 4 <header> 5 <nav> 6 <ul> 7 <li><a href="#"><em>MESSAGE</em>メッセージ</a></li> 8 <li><a href="#"><em>SERVICE</em>事業内容</a></li> 9 <li><a href="#"><em>ABOUT</em>会社概要</a></li> 10 <li><a href="#"><em>CONTACT</em>お問い合わせ</a></li> 11 <li><a href="#"><em>MESSAGE</em>メッセージ</a></li> 12 <li><a href="#"><em>SERVICE</em>事業内容</a></li> 13 <li><a href="#"><em>ABOUT</em>会社概要</a></li> 14 <li><a href="#"><em>CONTACT</em>お問い合わせ</a></li> 15 </ul> 16 </nav> 17 </header> 18 <article> 19 <h2 class="tit02">サイト</h2> 20 <img src="http://placehold.it/920x540/27709b/ffffff"> 21 <div class="sp_waku"> 22 こんにちわ<br><br><br><br><br><br><br><br><br>こんにちわ<br><br><br><br><br><br><br><br><br>こんにちわ<br><br><br><br><br><br><br><br><br> 23 </div><!-- / .sp_waku --> 24 <div id="footer"> 25 <h2 class="common-tit01">フッターの内容</h2> 26 <p><br><br><br><br><br><br><br></p> 27 </div> 28 </article> 29 30 </div> 31 </div><!-- / .inner --> 32 <!--/newsbox--> 33</div>

css

1.inner { 2 max-width: 1170px; 3 min-width: 1170px; 4 width: auto; 5 margin: 0 auto; 6} 7 8#main{ 9 display: -webkit-flex; 10 display: flex; 11 -webkit-justify-content: space-between; 12 justify-content: space-between; 13 -webkit-flex-direction: row-reverse; /* Safari */ 14 flex-direction: row-reverse; 15} 16 17 18#main > header{ 19 width:210px; 20 background:#ccc; 21} 22 23#main > header nav ul li a{ 24 display:block; 25 padding:20px 0; 26} 27 28#main > article{ 29 width:920px; 30 background:#eee; 31} 32 33#footer{ 34 background-color: #888; 35}

javascript

1<script src="js/jquery-1.12.0.min.js"></script> 2<script> 3$(function(){ 4 if($("header nav").length){ //.length特定の要素が存在するかのチェック 5 var obj = $("header nav"); 6 var offset = $(obj).offset(); 7 //console.log(offset); 8 var topPadding = 0; 9 $(window).scroll(function() { 10 if ($(window).scrollTop() > offset.top) { 11 $(obj).css('margin-top',$(window).scrollTop() - offset.top + topPadding); 12 } else { 13 $(obj).css('margin-top',0); 14 } 15 }); 16 } 17}); 18</script>

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

通常のウィンドウサイズで見ているときには問題はございません。
ウィンドウの高さサイズを縮めてみた際、「ウィンドウの高さ」<「メニュー分の高さ」になったときに、
下スクロールをした場合、スクロールが無限にできてしまいます、それに伴いjQueryで設定したスクロール分「margin-top」を上書きし続けるという機能が発動し続けてどこまでもmargin-topが入ってしまします。
大変お手数ではございますが、どなた様かお分かりになられる方がいらっしゃいましたらご教示いただけましたら幸いでございます、どうぞよろしくお願いいたします。
下記にソースを載せておきます。
デモページも作成しました。
デモページはこちら

【追記】
サイドバーのコンテンツの高さよりブラウザサイズが小さい場合は
「サイドバーのコンテンツがすべて表示されなくてもよい」という仕様です。

イメージ説明
イメージ説明
イメージ説明
イメージ説明

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

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

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

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

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

kanimaru

2017/06/12 12:41 編集

1点仕様が不明なので確認させてください。サイドバーのコンテンツの高さよりブラウザサイズが小さい場合は、サイドバーのコンテンツがすべて表示されなくてもいいのか、それとも、サイドバーのコンテンツ分の高さを必ずとるのでしょうか? 後者の場合、フッターは常にページ下部なのか、それともフッタより下に領域ができていいのでしょうか?
holic

2017/06/12 16:06

kanimaru様ご質問ありがとうございます。前者のほう(サイドバーのコンテンツがすべて表示されなくてもよい)で大丈夫です。
guest

回答2

0

まともに実装するとなると、バグの温床になりやすいのと処理のコスト高いので

CSSで対応した方がいいと思いますよ。

CSS

1header nav{ 2 position: fixed; 3 transform: translate3d(0, 0, 0);// ios対応 4} 5

投稿2017/06/12 23:21

kanimaru

総合スコア1013

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

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

holic

2017/06/13 00:27

kanimaruさん、回答ありがとうございます。 実際に実装してみました、今度はウィンドウズ横サイズを縮めて横スクロールした時にサイドバーメニューが表示されない事態が起きました、これについて解決できますでしょうか。
kanimaru

2017/06/14 03:12

CSSでflexが利用されてるのでどちらかの取捨選択になりますね・・。 floatで浮かして並べる場合はいいんですが、FLEXで操作すると この方式ができません。 きちんと確認せずすみません。
guest

0

ベストアンサー

javascript

1$(window).scroll(function() { 2 if( $(window).height() > $("header nav").height() && $(window).scrollTop() > offset.top){ 3 $(obj).css('margin-top',$(window).scrollTop() - offset.top + topPadding); 4 } else { 5 $(obj).css('margin-top',0); 6 }

みたいにすれば良いのかなと思います。

投稿2017/06/12 13:21

oskbt

総合スコア1895

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

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

holic

2017/06/12 16:25 編集

oskbtsさんご回答ありがとうございます、 試してみました。 条件分がfalseの場合はまったく追従しなくなってしまう点は直せないでしょうか。 ウィンドウの高さが狭まったとしても追従はさせたいところなのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問