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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

3590閲覧

リサイズすると中のif文が上手く動かない

harapara

総合スコア39

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/12/05 10:57

編集2018/12/06 02:38

はじめまして。
現在ウェブサイトを作成しており、jsがうまくいきません。


▼出来ないこと

横幅960px以上ではメニューのスタイルを各セクションによって変更したいのですが
それより小さい場合はトグルメニューでスタイルは一括したいです。

960 > $(window).width(); の条件式でスタイル調整していますが
初期サイズから横幅変えるとスタイルは初期のままなので
リサイズいれたところとうまくいきません。
例えばpcサイズからタブレットサイズまで縮めるとpcサイズのスタイルがそのまま残ってしまいます。
(タブレットサイズからpcサイズにする時はうまくいきます。)

console.logをみるとpcからタブレットにリサイズしてもタブレットサイズ条件のコンスルとpcサイズ条件でのコンソルも出てしまいます。
コンソル例(下コードから)
Sresizeclear
Rabout-productClear ←これが現れる(pcサイズ時に出るはずのコンソル)

▼ソース

$(function(){ var w = $(window).width();   // 横幅取得 var n = 960; if(w > n){   //タブレットより大きいデバイス console.log("Lclear");   // セクションごとにメニューのスタイルを変える $(function(){ $(window).scroll(function(){ // ABOUT-PRODUCT間  if ($(window).scrollTop() > $('#about').offset().top && $(window).scrollTop() < $('#contact').offset().top){ console.log("about-productClear"); // クラス追加 (文字色(黒)、padding変更) $("header").addClass("is-animation"); $("header").removeClass("contact-animation"); //CONTACTセクション  }else if ($(window).scrollTop() > $("#product").offset().top){ // クラス追加 (文字色(白)、padding変更) $("header").removeClass("is-animation"); $("header").addClass("contact-animation"); // それ以外のセクション(TOP) }else{ $("header").removeClass("is-animation"); $("header").removeClass("contact-animation"); }; }); });   }; }); $(window).resize(function(){ //リサイズ用  上とほぼ同じ処理 $(function(){ var w = $(window).width();  // 横幅取得 var n = 960; if(w > n){ //タブレットより大きいデバイス console.log('Lresizeclear'); $('.nav').css('display','block');   // セクションごとにメニューのスタイルを変える $(function(){ $(window).scroll(function(){ // ABOUT-CONTACT間 if ($(window).scrollTop() > $('#about').offset().top && $(window).scrollTop() < $('#contact').offset().top){ console.log("Rabout-productClear"); $("header").addClass("is-animation"); // それ以外のセクション }else{ $("header").removeClass("is-animation"); }; }); }); }else { //タブレットより小さい console.log('Sresizeclear'); $('.nav').css('display','none'); $("header").removeClass("is-animation"); }; }); });

読みにくいかと思いますが、お願い致します。
また、書き方ももっとまとめる方法ありましたら、ご指摘お願い致します。

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

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

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

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

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

m.ts10806

2018/12/05 11:05

「初心者」自体は要件とは違うと思いますので、質問文に書くのではなく「初心者アイコン」を利用してください。
miyabi-sun

2018/12/05 13:27

読みにくいのはコードの字下げ(インデント)がぐしゃぐしゃなだけです。整形ツールやまともなエディタを使ってインデントを整形してください。
guest

回答1

0

ベストアンサー

resizeやscrollなど何度もイベントが起きるイベント中に別のイベントを登録すると同じイベントを何度も登録することになってしまいます。(きちんと丁寧にイベントを解除しながら処理することは可能です)
フラグ変数wをresizeに任せ、scroll中の内容についてはif (w > n) {}で分岐するのが手早いと思います。

js

1// HTMLが提示されていないので内容は確認していません。 2$(function() { 3 var w = $(window).width(); // 横幅取得 4 var n = 960; 5 6 // セクションごとにメニューのスタイルを変える 7 $(window).scroll(function() { 8 // ABOUT-PRODUCT間  9 if ($(window).scrollTop() > $('#about').offset().top && $(window).scrollTop() < $('#contact').offset().top) { 10 console.log("about-productClear"); 11 // クラス追加 (文字色(黒)、padding変更) 12 $("header").addClass("is-animation"); 13 $("header").removeClass("contact-animation"); 14 15 //CONTACTセクション  16 } else if ($(window).scrollTop() > $("#product").offset().top) { 17 // クラス追加 (文字色(白)、padding変更) 18 $("header").removeClass("is-animation"); 19 $("header").addClass("contact-animation"); 20 21 // それ以外のセクション(TOP) 22 } else { 23 $("header").removeClass("is-animation"); 24 $("header").removeClass("contact-animation"); 25 } 26 }); 27 $(window).resize(function() { //リサイズ用  上とほぼ同じ処理 28 w = $(window).width(); // 横幅取得 29 if (w > n) { //タブレットより大きいデバイス 30 console.log("Lclear"); 31 $('.nav').css('display', 'block'); 32 } else { //タブレットより小さい 33 console.log('Sresizeclear'); 34 $('.nav').css('display', 'none'); 35 $("header").removeClass("is-animation"); 36 }; 37 }); 38});

$(function() {}); は外側に1回だけで十分です。( $(function() {$(function() {});}); とすることは意味が無いです)

投稿2018/12/05 11:13

kei344

総合スコア69407

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

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

harapara

2018/12/06 02:22

回答ありがとうございます! 質問なのですが、 「scroll中の内容についてはif (w > n) {}で分岐する」というのはif (w > n) {scroll...}ということでしょうか。回答のコードではresizeの時のみにそれが書かれているので、初期にタブレットサイズ(リサイズしない場合)だとscroll関数が発火してしまいます。
harapara

2018/12/06 02:55

すみません、scrollの中にif (w > n)といった意味だったのでしょうか。 それで上手くいくようになりました! 途方にくれていたのでとても助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問