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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

3回答

3263閲覧

「指定したサイズ以下限定」でjQueryを作動させたい

G.I

総合スコア11

CSS3

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

0グッド

1クリップ

投稿2019/06/10 08:26

編集2019/06/10 15:30

デバイス:MacBook Pro

まず、HTML/CSS/jQueryのコードは下記になります。

※jQueryはhtmlの<head>内に、

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

↑このように取り込んでおります。

コード

htmlの<body>

HTML

1<div class="attend"> 2 <div class="attend-contents"> 3 <div class="attend-icon"> 4 <p class="attend-tittle">タイトル</p> 5 </div> 6 <div class="attend-text min-768"> 7 <p>テキストテキストテキストテキストテキストテキストテキスト</p> 8 </div> 9 <div class="yazirushi2"></div> 10 </div> 11 <div class="attend-contents"> 12 <div class="attend-icon"> 13 <p class="attend-tittle">タイトル</p> 14 </div> 15 <div class="attend-text min-768"> 16 <p>テキストテキストテキストテキストテキストテキストテキスト</p> 17 </div> 18 <div class="yazirushi2"></div> 19 </div> 20 <div class="attend-contents"> 21 <div class="attend-icon"> 22 <p class="attend-tittle">タイトル</p> 23 </div> 24 <div class="attend-text min-768"> 25 <p>テキストテキストテキストテキストテキストテキストテキスト</p> 26 </div> 27 <div class="yazirushi2"></div> 28 </div> 29 </div> 30 31<script src="jquery_test.js"></script>

css

1.attend{ 2 padding: 60px 0 35px; 3} 4.attend-contents{ 5 display: flex; 6 justify-content: space-between; 7 padding: 30px 30px 20px 80px; 8 width: 95%; 9 margin: 5px auto; 10 background-color: #FEF5E0; 11 border-radius: 4px; 12 letter-spacing: 2px; 13 font-weight: bold; 14} 15.attend-text{ 16 width: 80%; 17} 18 19/*767px以下のcss */ 20@media (max-width:767px) { 21 .min-768{ 22 display: none; 23 } 24 .attend-image{ 25 display: none; 26 } 27 .attend-contents{ 28 flex-direction: column; 29 position: relative; 30 padding: 10px 15px; 31 } 32 .yazirushi2{ 33 position: absolute; 34 top: 50%; 35 right: 15px; 36 width: 11px; 37 height: 11px; 38 display: inline-block; 39 border-right: 4px solid black; 40 border-bottom:4px solid black; 41 transform: rotate(45deg); 42 } 43 .yazirushi2{ 44 display: flex; 45 align-items: center; 46 } 47 .attend-text{ 48 width: 95%; 49 margin-top: 20px; 50 } 51 .attend-icon { 52 width: 100%; 53 display: flex; 54 align-items: center; 55 } 56}

jQuery

$(function(){ var windowWidth = $(window).width(); var windowSm = 767; if (windowWidth <= windowSm){ $( ".attend-contents" ).click( function(){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); } }); $(".attend-contents").eq( 0 ).click(); }; });

質問

レスポンシブ時にjQueryを作動させる方法で調べた結果、このようにしたのですが、
これだと、**ブラウザ(Chrome)でPCサイズ(1200pxなど)のまま更新**すると、
画面幅を767px以下に縮小した場合でも、クリックイベントが起こりません。

※PC画面サイズで更新↓
イメージ説明
※その後、更新せずにそのまま画面幅を767px以下に↓(jQueryが効いていない)
イメージ説明

ですが、**あらかじめ画面幅を767px以下に縮小させた状態で更新**すると、
クリックイベントは反映されますが、そのまま画面幅を767pxより大きくすると、
クリックイベントが引き継がれているままになってしまいます。

※767px以下に縮小させた状態で更新↓
イメージ説明

※その後、更新せずにそのまま画面幅を767pxより大きくする↓(このままクリックするとテキストが消える状態)
イメージ説明

要は、「767px以下のみでクリックイベントを作動させたい」だけです。

この↓型を試したのですが、elseをつけないからなのでしょうか?

var windowWidth = $(window).width(); var windowSm = 767; if (windowWidth <= windowSm) { //横幅640px以下のとき(つまりスマホ時)に行う処理を書く } else { //横幅640px超のとき(タブレット、PC)に行う処理を書く }

どこが間違えているのか、教えて頂けますと幸いです。

それとも、これはこれで正しく作動していると言う事なのでしょうか?
jQueryはあくまで、
「画面幅を一つのデバイスで縮小したり、拡大したりする事を前提としていなく、最初に開いた画面サイズが〇〇pxだったら...が前提」なのでしょうか?
もしその論理なら、このコードは正しいのですが...。

一度PC画面サイズで更新し、
そのまま画面幅を767px以下に縮小した際に作動するような処理はあるのでしょうか?

※追記2019.6.11 0:28 補足
上記には
「767px以下のみでクリックイベントを作動させたい」
こうあります。
これは、
「767px以下のみでクリックイベントを作動させたい且つ、それ以外(768px以上)は作動させない」
と言う意味になります。
その為、タイトルも「指定したサイズ以下限定」と言う表現にしました。

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

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

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

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

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

guest

回答3

0

ベストアンサー

jQueryにおいても、ネイティブにおいても、
画面リサイズ時に、処理を行うイベントは用意されております。

【jQuery入門】resize()によるウィンドウリサイズの方法まとめ!

これらを使えば、
今書かれている、処理と同じ処理を、リサイズイベントの中で書けば、
リサイズするたびに、画面サイズの条件に合えば実行と、できるでしょう。

下記でいかがでしょうか。
各所で、コメントアウトにて、こうした、などの記載をしています。

javascript

1$(function(){ 2 3// 処理が頻発しないようにするため、タイマーを用意 4let resizeTimer = null; 5// 変数を外側においた 6let windowWidth = $(window).width(); 7const windowSm = 767; 8 9 10$(window).resize(function() { 11 // resizeのたびに、数値を更新 12 windowWidth = $(window).width(); 13 // タイマーが生きていたら、クリア 14 if (resizeTimer) { 15 clearTimeout(resizeTimer); 16 } 17 // リサイズのタイミングを変えたければ、タイマーの時間を調整 18 resizeTimer = setTimeout(function(){ 19 // イベント設定用関数の実行 20 addClickevents(); 21 }, 100); 22 23}); 24 25// イベントを設定する関数 26function addClickevents(){ 27 // クリックイベントは、いずれの場合も、一旦削除する 28 $( ".attend-contents" ).off('click'); 29 if (windowWidth <= windowSm){ 30 // 横幅が、設定以下である 31 $( ".attend-contents" ).click( function(){ 32 // 二重三重発生を防ぐためにストップを挟む 33 $( this ).find( ".attend-text" ).stop().slideToggle(); 34 if( $( this ).hasClass( "open" ) ){ 35 $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); 36 $( this ).removeClass( "open" ); 37 $(this).find(".attend-tittle").css("border-bottom","none"); 38 } else { 39 $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); 40 $( this ).addClass( "open" ); 41 $(this).find(".attend-tittle").css("border-bottom","2px solid black"); 42 } 43 }); 44 // 一番うえのクリックが、動作不良になっていたため、一旦処理をコメントアウト。setTimeoutや、jQueryのdelay()メソッドをうまく使えば、うまく動作するかもしれない。 45 //$(".attend-contents").eq( 0 ).click(); 46 } else { 47 // 念の為、この条件下でも、クリックイベントを削除 48 $( ".attend-contents" ).off('click').each(function(){ 49 // 各クラス、CSSのクリアを行なった 50 $( this ).removeClass( "open" ).find( ".yazirushi2" ).css( "transform", "" ); 51 $( this ).find(".attend-tittle").css("border-bottom",""); 52 $( this ).find(".attend-text").css("display",""); 53 }); 54 55 } 56} 57// 初回実行 58addClickevents(); 59 60 61});

投稿2019/06/10 08:33

編集2019/06/10 16:15
miyabi_takatsuk

総合スコア9528

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

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

miyabi_takatsuk

2019/06/10 08:35

ちなみに、PCブラウザではもちろんですが、スマホのラウンドスケープモードに変えた時、戻した時も、このリサイズイベントは実行されます。
G.I

2019/06/10 11:45

その記事を何度か読み、見よう見真似で試してみたのですが、 全くできません。 http://analogic.jp/window-resize-complete/ こちらの記事も参考に、見よう見真似で下記のコードにしてやってみたのですが、処理が繰り返されてしまったりして思うようになりませんでした。 resizeを使用するにあたり、この場合はどのようなコードになるのでしょうか? var timer = 0; window.onresize = function () { if (timer > 0) { clearTimeout(timer); } timer = setTimeout(function () { $( ".attend-contents" ).click( function(){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); }; }); $(".attend-contents").eq( 0 ).click(); //ここに処理の内容が入る }, 200); };
miyabi_takatsuk

2019/06/10 13:26

回答にコードを記載しました。 これでひとまず、リサイズ時で、イベントの付け替えがされているはずです。
miyabi_takatsuk

2019/06/10 13:38

おおむね、コメントでいただいたとおりで大丈夫なのですが、 リサイズイベントは、非常に乱発されやすいものなので、 リサイズのたびに、0.001秒に一回とかの頻度で発生するので、 処理が繰り返されてしまうので、そこは、タイマーなどを使い、うまーく調整したりするのが、一般的です。 回答に記載のコードは、まさにその手法を使っています。
G.I

2019/06/10 13:56 編集

ありがとうございます。 回答のコードで今、ブラウザで確認しましたが、 これですと、 PC画面サイズで更新→マウスで767px以下に縮小→クリックイベント発生 ここまでは良いのですが、 縮小時に最初にテキストが表示されている要素を一度クリックして閉じてから、 再度マウスで画面サイズを拡大すると、最初のテキストが非表示になってしまいます。 また、 PC画面サイズで更新→マウスで767px以下に縮小→クリックイベント発生 この後にクリックをしないで、そのまま画面拡大した際、 最初のタイトルにborder-bottomが適用されたままです。 ですので、このコードでは、 「767px以下限定」の作動になっておりません...。
miyabi_takatsuk

2019/06/10 14:46 編集

すみませんが、これ以上は、作業依頼レベルになるかなと思いますよ・・・。 質問の要件は、「767px以下のみでクリックイベントを作動させたい」ですよね。 その要件は満たせています。 (クリックイベント自体は、767px以下の時のみで動作している) その先の細かい動作などは、質問要件外かと思われますので、 この先の細かい調整、タイミング、効かせるCSSは、質問者さんがされるべきかと思います。 まず、そこから自分で修正してみて、 どうしても、細かい部分で実現がどうしてもできなければ、 その部分にフォーカスしたご質問を別途たてられるといいかと思います。
miyabi_takatsuk

2019/06/10 14:57

それと、ブラウザ別に少し動作が違う可能性はございますので、 クリックイベント自体も、うまく767px以下での適用になってないなどありましたら、 どうか、ブラウザの記載もお願いします。
G.I

2019/06/10 15:15

質問の要件はおっしゃる通り、 「767px以下のみでクリックイベントを作動させたい」です。 ここに「のみ」とあります通り、逆を返せばこれは「768px以上は作動させない」と言う意味になると思うのですが、いかがでしょうか? 仮に質問が「767px以下でクリックイベントを作動させたい」 でしたら、「のみ」が入っていない為、その主張もわかりますが、 今回は「のみ」と記載しているので、これは768px以上では作動させない と言う意味になると私は思います。 質問文にも、 「あらかじめ画面幅を767px以下に縮小させた状態で更新すると、 クリックイベントは反映されますが、そのまま画面幅を767pxより大きくすると、 クリックイベントが引き継がれているままになってしまいます。」 ↑このような記載がありますよね...。 要件は「767px以下は作動させたい且つ、768px以上は作動させたくない」になります。 >どうか、ブラウザの記載もお願いします。 こちらも質問文に既に記載しているのですが、Chromeです。
G.I

2019/06/10 15:31

念の為、補足として追記しました。
miyabi_takatsuk

2019/06/10 15:34 編集

あれ、768px以上でクリックイベント外すようになってますが、そのような動きになってないでしょうか? 私は、同じくmacのchromeで確認してますが、768px以上では、クリックしても反応しない動作になっております。
G.I

2019/06/10 15:37

私自身、コードを指摘できるほどの知識がないので、部分的コードの指摘はできませんが、 回答頂いているコードをそのままコピペしてブラウザで見る限り、 「767px以下は作動させたい且つ、768px以上は作動させたくない」 が実現できておりません。 挙動結果は22:53に記載した通りです。
G.I

2019/06/10 15:43

>768px以上では、クリックしても反応しない動作になっております。 それは反応しません、前述の通りですが、 PC画面サイズで更新→767px以下に縮小→一番上のテキストは開かれてる状態 この状態で、既に表示されているテキストの要素を一度クリックして閉じてから、 再度マウスで画面サイズを拡大すると、最初のテキストが非表示になってしまいます。 また、 PC画面サイズで更新→マウスで767px以下に縮小→一番上のテキストは開かれてる状態 この後に一切クリックしないで、そのまま画面拡大した際、 最初のタイトルにborder-bottomが適用されたままです。
G.I

2019/06/10 15:51

例えば、このサイト https://isara.life/ の 「受講の流れ」と言う箇所を見て頂ければわかるかと思います。 これは767px以下のクリックする場所は矢印ですが。 ただこのような挙動にしたいだけです。 これは「767px以下は作動させたい且つ、768px以上は作動させたくない」 と言う表現で伝わりますでしょうか? 回答のコードですと、 767px以下から画面サイズを大きくすると、 クリックはできませんが、「タイトルにボーダーが付いたまま」だったり、 「テキストが非表示のまま」だったりすると言う事です。
miyabi_takatsuk

2019/06/10 16:25 編集

いえ、なので、「767px以下のみでクリックイベントを作動させたい」 クリックイベントという部分はクリアしておりましたよね? クリックイベントの作動と言っている限り、中身の処理までは含まれないと、とられてしまいますよ。 その先のCSSのクリアの処理を追加しました。 これでボーダーなどは消え、テキストは出てくるでしょう。 この、「クリックイベントの作動」であれば、あくまでクリックイベントのことでしかとられません。 その先の調整は、中身の処理までは、「クリックイベントの作動」という言葉には含まれません。 細かい話ですが、ボーダーがでたままだとか、テキストが消えたままにしたくない、などの中身の処理も含めてなら、その部分も質問本文に含めるべきです。 ようは伝わるだろうではなく、要件を整理すべきって話です。 > 要は、「767px以下のみでクリックイベントを作動させたい」だけです。 などと言わずに、「クリックした後に、768以上にした時に、PCの表示に戻したい」などの方が、よっぽど伝わりますよ。 文章で伝えるのは、相手の表情が見えないため、また感覚も伝わらないため、 想像以上に細かく、丁寧に、伝えなければ、伝わらないものです。 そして、知識が浅いとお思いなら、無理して専門用語でまとめようとせず、 自分がやりたいことを、下手な文章で構いませんので、実現したいことを、細かく書いた方がいいかと思いますよ。 また、申し訳ないのですが、一番最初のもののクリックの発動に関しては、発動させると、 どうも、処理がうまくいかないので、コメントアウトさせていただきました。 ここに関しては、質問者さん自身であとは、やるべきかと思います。 クリックイベントの作動の条件と、追加の、CSSのクリアの部分は、要件を満たすことができたと思います。
G.I

2019/06/10 16:23

>クリックイベントの作動と言っている限り、中身の処理までは含まれないと、とられてしまいますよ。 なるほどですね。「のみ」と記載すれば「それ以外は作動しない」と伝わると普通に思っていました。 >「クリックイベントの作動」であれば、あくまでクリックイベントのことでしかとられません。 ボーダーがでたままや、テキストが非表示になるなども「クリックイベントの作動」が関与している事から、そう思ったのですが、違うと言う事でしょうか? 「ボーダーがでたままや、テキストが非表示になる」=「クリックイベント内に記載されている事が起きてる」 わけだから、「クリックイベントの作動」と解釈していたのですが、違うと言う事でしょうか? (中身はクリックイベントに入らないと言う事ですか?) 767px以下から大画面に戻すと、何も作動されていない(ボーダーなども)事が、クリックイベントを作動させていない事になりませんか? また、編集したコードを確認しました。ありがとうございます。 一番最初のもののクリックの発動に関しては処理がうまくいかないのですね...。回答のコードでどこをどう修正すれば良いのか現時点では検討もつかないので、それについては後日別で質問したいと思います。
miyabi_takatsuk

2019/06/10 16:53 編集

そうです。 クリックイベントの作動と言っている限り、 クリックイベント自体の作動であって、中身の処理は別です。 > 767px以下から大画面に戻すと、何も作動されていない(ボーダーなども)事が、クリックイベントを作動させていない事になりませんか? 逆です。何も作動させていないから、CSSなどがクリアされないんですよ。 クリックイベントを作動させたあと、CSSをクリアなどして、となると、それはもう、別の処理です。 だって、クリックイベントを作動させた後、大画面でクリックイベントを外すんですから、当然クリックで効かせた、CSSなどはクリアされませんよね? あくまで質問要件は、クリックイベントの作動のコントロールと捉えられる内容だったので、 それだと、クリックイベント作動で、処理で追加されてしまった、各々をクリアするのは、クリックイベント作動外の、別処理になります。
miyabi_takatsuk

2019/06/10 16:46

ちょっと、こすい話ではありますが、 仕事であったら、ここまでやるべきだな、とお客様の意向を推測してやったりしますが、 ここはあくまで、有志のQAサイトですので、正直、掲示された要件以上のことはすべきではないと、考えております。なぜなら、それ以上のことを求めるのは、作業依頼であり、お金が発生するような話だと思うからです。 (私個人の見解なので、間違っているかもしれません) なので、どうか、次質問される場合は、自身の目的や状況を、もう少し細かく丁寧にされ、要件をしっかり定義されることをお勧めします。 専門知識が少ないな、とご自分で思うならば、無理して専門用語を使おうとせず、 何々をこうしたい、と言われた方が、伝わりやすい、質問になるかと思いますよ。
hentaiman

2019/06/10 17:12

> お金が発生するような話だと思うからです。 その通りですよね。それに3名の各解答者の回答を生かそうと努力しているとはとても感じられなかったので私は無視してました。例じゃなくて答えを教えろとかアホくさい。自分の回答も質問内容に対しての答えになってると思うんですけどね、コピペで使えるコードまで書いたし笑 miyabi_takatsukさんはカナリ親切だな~と思ってました もしも興味持てる内容ならその辺度外視で対応するかもしれませんけど、そういうレベルの質問出来る人はそもそも自力で調べながらやっちゃいますしねw
G.I

2019/06/10 17:12

なるほどですね。意味はわかりました。 >クリックイベントを作動させた後、大画面でクリックイベントを外すんですから、当然クリックで効かせた、CSSなどはクリアされませんよね? この「当然」が私にはわからなかったのですがね。 でしたら今回の場合の要件(実現したい事)は、 「767px以下でのみクリックイベントを作動させ、且つ768px以上に拡大した場合は767px以下で作動させたクリックイベントは無効化させたい」 で伝わりますか?
miyabi_takatsuk

2019/06/10 17:18 編集

hentaimanさん > 涙出そうになりました。いろいろお察しありがとうございます。 G.Iさん > んー、まずよくわからないうちであるならば、むしろクリックイベントって言葉使うのやめましょう。 クリックイベントはクリックイベントであって、中身の処理は別と何回も言っていますよね。 ”クリックイベントは無効化させたい”ではなく、(←それだと結局話が戻る) "クリックイベントの中で実行したCSSの変更などを元に戻したい"、って言って初めて伝わりますよ。
G.I

2019/06/10 17:21

hentaiman 生かすも何も、あなたの回答でどう結びつくかのロジックがわからなかったからなのですが。 >努力しているとはとても感じられなかったので私は無視してました 無視って笑 わざわざ書く事でしょうか?笑 >例じゃなくて答えを教えろとかアホくさい あなたのプロフィールには↓このような記載がありますが笑 あれ...矛盾では?笑 一部のベテラン風の人はガチコミュ障なの? 「東京駅に行くのはこの道で良いんですか?」 「(ここから)東京駅に行くのはどう行ったら良いですか?」 という質問に対して 『地図の見方(のヒント)を教えてあげますよ』 みたいなズレた回答するのはなぜ? 質問が脳内変換されて「地図の見方を教えてもらえませんか?」に変わってるの? 分かった上でやってるっぽい人もいるけど、ガチでコミュ障の人いるよね
G.I

2019/06/10 17:23

miyabi_takatsukさん 今回の場合は、 "クリックイベントの中で実行したCSSの変更などを元に戻したい" ですか。なるほど、わかりました。
hentaiman

2019/06/10 17:29

だからわざわざGIには言ってませんよ。miyabi_takatsukさんにコメントしたかっただけですからねえ。 矛盾してませんよ。3名とも質問に対する適切な回答です。miyabi_takatsukはわざわざ手間かけてコードまで書いてくれてます。ちなみにGIが馬鹿にしているかのように載せているhentaimanのプロフィールで例えるなら、GIの行きたいところは東京駅では無かったのに東京駅に行きたいって言ってたって事です。 miyabi_takatsukさんはかなり手間かけて回答されてる方です。なので、GIの質問が正しかったらとっくに回答にたどり着いていたはずです。
miyabi_takatsuk

2019/06/10 17:30

そうです。 クリックイベントはあくまでクリックイベント 中身の処理はあくまで中身の処理です。 関数は分解すると、関する数となります。もともと数学用語ですね。 なので、"関する数"であるため、中に関数で処理書いたとしても、 その親と全く同一で言うことはできないのです。 なので、親であるクリックイベントはあくまでクリックイベントでの話で、 関する数を、中に置いてるだけなので、 クリックイベントをうんぬんしたいと言っちゃうと、中身の"関する数"の話とは別個の話になっちゃうんです。 これ以上は、本件から外れていくので、ここまでにします。
G.I

2019/06/10 17:38 編集

hentaiman わざわざ言っていないと書いてあるが、 miyabi_takatsukさんと私とのやりとりしているこの場で、 アホくさいなどと書かれたら、不快なのも当然でしょう。 「わざわざ」私が見える場でそのような事を書くあなたの神経がわかりませんが、今後はもし私の質問を見つけても回答、及びコメントしないで頂きたい。
退会済みユーザー

退会済みユーザー

2019/06/10 23:19

非常に勘違いの過ぎた失礼な質問者ですね。 ここはエンジニア同士が切磋琢磨し合うために質問する場ですよ。 礼も言わずに「動きません」を連発する姿勢が不快です。 勉強する気がない、ただの作業依頼ならクラウドワークスやランサーズで有料依頼するべきです。
G.I

2019/06/11 02:07

dyoshikawa 横から入ってくるなよ笑 鬱陶しい。 ここはエンジニア限定サイトではないが?不快かどうかのお前の意見は聞いてないし、わざわざ言う必要もなかろう。
退会済みユーザー

退会済みユーザー

2019/06/11 02:59

あなたの意見も聞いていませんが。 何か発信をした以上、ポジティブな反応もネガティブな反応も返ってくる可能性があります。 誰でも見れる場所に書き込むとはそういうことだと思いますよ。
G.I

2019/06/11 03:23

dyoshikawa あなたも意見も聞いてない? お前が横からコメントを指摘たんだろ? それに対して、「お前の意見は聞いてない」と返信しただけだろ? それでお前が「あなたも意見も聞いてない」はおかしいよな?大丈夫か? 横からわけわからんのが入ってきたから、邪魔と言ったまで。
guest

0

jQueryはあくまで、

「画面幅を一つのデバイスで縮小したり、拡大したりする事を前提としていなく、最初に開いた画面サイズが〇〇pxだったら...が前提」なのでしょうか?

「jQueryが」ではなく、書いたコードがその様になっています。$(window).width();は最初1回しか実行されないので、幅の判定は最初1度で終わってしまいます。

以下のどちらかの方法を取る必要があります。

  • clickイベントは幅にかかわらずセットしておいて、イベントの中でページ幅を判定して不適切なら抜ける
  • resizeなどで幅をチェックして、イベントをつけ外しする

投稿2019/06/10 08:36

maisumakun

総合スコア145183

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

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

G.I

2019/06/10 11:11 編集

>「jQueryが」ではなく、書いたコードがその様になっています。 やはりそう言う事でしたか。 >clickイベントは幅にかかわらずセットしておいて、イベントの中でページ幅を判定して不適切なら抜ける これをどう書けば良いのでしょう? ↓このようにしてみたのですが、これだと更新時がPC画面でそのまま767px以下に画面縮小した際、クリックイベントが適用されました。 ですが、今度は767pxより大きく画面拡大した際、テキストが消えてしまいます。 どこがどう間違っているのか、またこの場合の正しいコードを教えてください。 $(function(){ $( ".attend-contents" ).click( function(){ var windowWidth = $(window).width(); var windowSm = 767; if (windowWidth <= windowSm){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); } }; }); $(".attend-contents").eq( 0 ).click(); });
guest

0

.min-768{ display: none; }

考え方の問題ですが、こいつを活用してみるのはいかがでしょう?
指定のサイズ以下になったらnoneになるわけなので、そいつがnoneになっているかどうかでjqueryのイベントを動作させるかどうかを判定する。
あえて判定用の為だけの.min-768を適用した要素を作ってもいいと思いますが

追記

<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <style> @media (max-width:1200px) { .size{ display:block; } } @media (max-width:767px) { .size{ display:none; } } </style> </head> <body> <div class="size" id="check"> ひょうじ </div> <button>かくにん</button> </body> <script> $('button').on('click', function(){ alert($('#check').css('display')); if($('#check').css('display') == 'block'){ alert('さいずでかいよ'); }else{ alert('さいずちっちゃいよ'); } }); </script> </html>

投稿2019/06/10 08:34

編集2019/06/10 10:21
hentaiman

総合スコア6415

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

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

G.I

2019/06/10 09:24

>そいつがnoneになっているかどうかでjqueryのイベントを動作させるかどうかを判定する なるほどですね。ですがその場合、どのようなコードになるのでしょうか? このような感じでしょうか?↓ $(function(){ if ($(.min-768).css("display") === "none"){ $( ".attend-contents" ).click( function(){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); } }); $(".attend-contents").eq( 0 ).click(); }; }); ですが、これだと何も作動されません。 if ($(.min-768).css("display") === "none") この部分が間違えているのでしょうか?
hentaiman

2019/06/10 09:48

動作確認できるように追記しましたよ。ちなみに自分も以前はresize使ったものです。 コメントに書いた通り「考え方の問題」なので、王道に行くならresizeです。 けど今の自分が質問文にあるような状況対して処理を書くなら、この回答に書いたような判定の仕方をします。
hentaiman

2019/06/10 09:53

判定するなら、clickの処理の中で判定してください
G.I

2019/06/10 10:39

追記のコードを確認しましたが、 今回のコードにどう結びつくかがわかりませんでした。 (onの使い方がわからないと言う事もあります) >判定するなら、clickの処理の中で判定してください との事ですが、 $(function(){ $( ".attend-contents" ).click( function(){ if ($(.min-768).css("display") === "none"){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); }: }; }); $(".attend-contents").eq( 0 ).click(); }); これでもできませんでした。(文法が間違っているとは思うのですが、どこがどう間違えているのかわからず...) 要は、このコードの場合、どう書くべきを教えて頂きたいのです。 追記で書いて頂き恐縮ですが、 「例」と言うより、この場合の「回答のコード」を教えて頂きたいと思っております。
G.I

2019/06/10 13:09

追記のコードを参考に、見よう見真似で記述してみましたが、文法か何かが違うのかできません。 正解のコードを教えて頂きたいのですが...。 $('.attend-contents').on('click', function(){ if($('.min-768').css('display') == 'none'){ $( this ).find( ".attend-text" ).slideToggle(); if( $( this ).hasClass( "open" ) ){ $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 45deg )" ); $( this ).removeClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","none"); } else { $( this ).find( ".yazirushi2" ).css( "transform", "rotate( 225deg )" ); $( this ).addClass( "open" ); $(this).find(".attend-tittle").css("border-bottom","2px solid black"); }; }; }); $(".attend-contents").eq( 0 ).click();
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問