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

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

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

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

Q&A

解決済

3回答

1312閲覧

jQuery スティッキーヘッダーの実装 変数が定義されていないとエラーが出る

goneshi

総合スコア13

jQuery

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

0グッド

0クリップ

投稿2018/11/21 09:17

編集2018/11/22 15:27

jQuery グローバル変数とローカル変数について?
初歩的な質問です
jQueryでスティッキーヘッダーを実装していました。
が、実装中に以下のエラーが来ました。おそらくjQueryの定義について理解していないため起きたのだと思うのですが、色々と手を動かしても解決しません

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

[ts] '$jqObjOffsettop' が宣言されていますが、その値が読み取られることはありません。
[ts] '$currentHeight' が宣言されていますが、その値が読み取られることはありません。

該当のソースコード

jQuery

1$(function () { 2 const $win = $(window) 3 4 $(".navbar").each(function () { 5 $win.on("scroll", function () { 6 var $jqObj = $(".navbar") 7 var $jqObjOffsettop = $jqObj.offset().top; 8 var $currentHeight = $(document).scrollTop(); 9 }); 10 if ($currentHeight > $jqObjOffsettop) { 11 $jqObj.addClass("sticky"); 12 } else { 13 $jqObj.removeClass("sticky"); 14 } 15 }); 16}); 17 18

HTML

1 <nav class="navbar navbar-expand-lg navbar-light bg-light"> 2 <a class="navbar-brand" href="#">LOGO</a> 3 <ul class="nav justify-content-end"> 4 <li class="nav-item"> 5 <a class="nav-link active" href="#">Active</a> 6 </li> 7 <li class="nav-item"> 8 <a class="nav-link" href="#">Link</a> 9 </li> 10 <li class="nav-item"> 11 <a class="nav-link" href="#">Link</a> 12 </li> 13 <li class="nav-item"> 14 <a class="nav-link disabled" href="#">Disabled</a> 15 </li> 16 </ul> 17 </nav>

CSS

1.sticky{ 2 position:sticky; 3 top:0; 4 background-color: black; 5}

試したこと
if以下の文を$win.のブロックの中に入れたら作動しますが、スクロールごとにif文が働くためにヘッダー部分がいちいち固定され失敗します

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

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

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

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

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

m.ts10806

2018/11/21 21:56

タイトルが内容と若干遠いのでもう少し内容に寄せたタイトルにしていただけますか?
x_x

2018/11/22 02:58

エラーを出ないようにすることは簡単ですが、何をしたいのかを書いたほうがいいかもしれません。HTMLとCSSとともに
goneshi

2018/11/22 15:18

ご指摘ありがとうございます!修正させていただきます
guest

回答3

0

ベストアンサー

$winをscroll時に$currentHeightや$jqObjOffsettopを調べても
その外でifしては意味がないということではないでしょうか?

投稿2018/11/21 09:31

yambejp

総合スコア114777

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

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

goneshi

2018/11/21 09:53

$(".navbar").each(function () { let $jqObj = $(".navbar"), $jqObjOffsettop = "", $currentHeight = ""; $win.on("scroll", function () { $jqObjOffsettop = $jqObj.offset().top; $currentHeight = $(document).scrollTop(); }); if ($currentHeight > $jqObjOffsettop) { $jqObj.addClass("sticky"); } else { $jqObj.removeClass("sticky"); } }); このように変更しましたが未だ解決しません
yambejp

2018/11/21 09:58

$win.onの中で参照しないと意味がないでしょう
goneshi

2018/11/22 15:40

その通りでした!解決しました!
guest

0

無事解決しました!

$(".navbar").each(function () { let $jqObj = $(".navbar"), $currentHeight = ""; $win.on("scroll", function () { $currentHeight = $(document).scrollTop(); let $jqObjOffsettop = $jqObj.offset().top; if ($currentHeight > $jqObjOffsettop) { $jqObj.addClass("sticky"); } else { $jqObj.removeClass("sticky"); } }); });

どうやら最初のコードでscrollごとにoffset().topで値を取得し続けていたためガタガタになっていたんだと思います。
グダグダな質問でしたが回答をくださった方本当にありがとうございました

投稿2018/11/22 15:42

goneshi

総合スコア13

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

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

0

今提示してるコードだけでは検証が出来ないですが

scrollの中にeach
eachの中にvarifではどうですか?
あと、eachの中はthis使えますよ

投稿2018/11/21 11:21

akihiro3

総合スコア955

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

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

goneshi

2018/11/22 15:41

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問