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

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

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

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

jQuery

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

CSS

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

Q&A

解決済

2回答

2096閲覧

JavaScript スクロール時にクラスを付与するプログラムについて

pan_x

総合スコア13

JavaScript

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

jQuery

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

CSS

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

0グッド

0クリップ

投稿2019/02/06 10:21

前提・実現したいこと

下記2つのプログラムにて、
①アクセス時とスクロール時にadd_class_in_scrolling()を実行し、画面内に指定要素がある場合はclassを付与
②画面スクロール時にnav要素にfixedクラスを付与し、メニューバーを上部に固定
の機能を実装しています。

それぞれ個別だと問題なく動くのですが、
同じjsファイル内に置いた時に下記エラーが発生し、
②の機能が動作しなくなります。
解決方法をご教授いただけますと幸いです。

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

Uncaught TypeError: Cannot read property 'top' of undefined at add_class_in_scrolling

該当のソースコード①

JavaScript

1 $(window).on('load scroll', function () { 2 add_class_in_scrolling($('.hoge')); 3 }); 4 function add_class_in_scrolling(target) { 5 var winScroll = $(window).scrollTop(); 6 var winHeight = $(window).height(); 7 var scrollPos = winScroll + winHeight; 8 if (target.offset().top < scrollPos) { 9 target.addClass('hogehoge'); 10 } else { 11 ; 12 } 13 };

該当のソースコード②

JavaScript

1 $(function () { 2 var offset = $('.nav').offset(); 3 4 $(window).scroll(function () { 5 if ($(window).scrollTop() > offset.top) { 6 $('.nav').addClass('fixed'); 7 } else { 8 $('.nav').removeClass('fixed'); 9 } 10 }); 11 });

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

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

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

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

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

kei344

2019/02/06 10:29

エラーが出るコードも質問文に追記してください。
pan_x

2019/02/06 10:43

ありがとうございます。 エラーはソースコード①の add_class_in_scrolling($('.hoge')); 部分に対して出ているようです。 エラーメッセージは下記の通りです。 Uncaught TypeError: Cannot read property 'top' of undefined at add_class_in_scrolling
kei344

2019/02/06 10:49

質問本文を読んで、「①②と別のプログラムを実装して、それは動いている状態で、一緒に使うと動かない」と読みとりました。なので、「①」「②」「①②」のコードがあったほうがよいのでは?
pan_x

2019/02/06 11:19

ありがとうございます。 「個別だと動く」というのは ・別のjsファイルに記載した場合 や ・どちらか片方をコメントアウトなどで削除した場合  です。 なので仰る①②のコードは単純に①+②というイメージです。 言葉足らずで失礼致しました。
guest

回答2

0

ご提示されているコードで問題なく動くようですので、おそらく単純な記述ミスではないかと思われます。
エラーの内容は「undefinedにあるtopが読み込めない」ということなので、例えば

JavaScript

1add_class_in_scrolling($('.hoge'));

の'.hoge'とするところを'hoge'のように.を書き忘れてしまったりということはありませんか。

投稿2019/02/06 12:28

cerfweb

総合スコア1899

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

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

pan_x

2019/02/06 16:16

回答ありがとうございます! 見返したところ問題はないようでした。 また、別の方の回答により無事解決致しましたが 大変参考になりました。感謝致します。
guest

0

ベストアンサー

$('.hoge') が無い、もしくは準備前の場合はそのエラーが出ます。
全体がわからないので最低限エラーが出なくなる方法くらいしか提示できませんが、下記のようにしてみてください。

js

1if ( target.offset() && ( target.offset().top < scrollPos ) ) {

投稿2019/02/06 12:28

kei344

総合スコア69398

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

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

pan_x

2019/02/06 16:14

回答ありがとうございます!ご指示をいただきましたコードを追記しましたところ、 無事解決しました。少ない情報から解決まで導いていただき感謝致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問