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

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

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

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

Q&A

2回答

3268閲覧

jQueryでブラウザの幅と、スクロール量を取得して表示方法を切り替える

Yucchi

総合スコア29

jQuery

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

0グッド

0クリップ

投稿2017/07/14 08:59

編集2017/07/18 01:46

今回はブラウザ幅480px以下の場合で尚且つページトップから100pxスクロールした場合にのみ、#contact_fixed_spの部分を表示したいと思っています。
それぞれブラウザの幅におおじて表示非表示を切り替えるコードとスクロール量を取得してfadeIn/fadeOutさせるコードは何とかできたのですがその先が分かりません。
どなたかお教えいただけると助かります。宜しくお願いいたします。

html

1<div id="contact_fixed_sp"> 2<a>contact_btn</a> 3</div>

css

1.invisible { display:none; }

jQuery

1<script> 2 $(function() { 3 4 $(window).scroll(function(){ 5 // 対象までの高さ 6 var distanceTop = 100; 7 8 if ($(window).scrollTop() > distanceTop) { 9 $('#contact_fixed_sp').fadeIn("slow"); 10 } else { 11 $('#contact_fixed_sp').fadeOut("slow"); 12 } 13 }); 14 }); 15 </script> 16 <script> 17 var checkWidth = function() { 18 var browserWidth = $(window).width(); 19 20 if(browserWidth <= 480){ 21 $('#contact_fixed_sp').removeClass('invisible'); 22 }else{ 23 $('#contact_fixed_sp').addClass('invisible'); 24 } 25 }; 26 27 $(function(){ 28 checkWidth(); 29 $(window).resize(checkWidth); 30 }); 31 </script>

頂いた回答を元に少しこんな感じかなというのを下記に書き足してみましたがやはり実装できません。どこが間違っているのかご指摘いただけると助かります。jQueryは書き方の基礎もないのでお恥ずかしい限りです。

css

1#contact_fixed_sp { 2 display: none; 3} 4@media screen and (max-width:480px) { 5#contact_fixed_sp { 6 display: block; 7} 8}

jQuery

1<script> 2 $(window).resize(function(){ 3 var w = $(window).width(); 4 var x = 480; 5 if (w <= x) { 6 .on('scroll', function () { 7 var distanceTop = 130; 8 var $contactFixedSp = $('#contact_fixed_sp'); 9 10 if ($(window).scrollTop() > distanceTop) { 11 $contactFixedSp 12 .stop() 13 .fadeIn("normal"); 14 } 15 else { 16 $contactFixedSp 17 .stop() 18 .fadeOut("normal"); 19 } 20 }) 21 .trigger('scroll'); 22 }); 23 </script>

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

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

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

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

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

guest

回答2

0

480px以上の場合、要素を非表示にしたのであれば、よほど理由がない限り、CSSのメディアクエリを利用した方が手っ取り早いです。

また、フェードイン・アウトの処理を行う際、上下スクロールを高速で行うと、その回数分フェードイン・アウトが走ってしまい、要素が明滅する感じになるので、アニメーションを止めるstopを追加し、余計なアニメーションを停止させるようにしてください。

css

1@media all and (min-width: 481px) { 2 #contact_fixed_sp { 3 display: none; 4 } 5} 6 7@media all and (max-width: 480px) { 8 #contact_fixed_sp { 9 display: none; 10 position: fixed; 11 right: 0; 12 top: 0; 13 } 14 15 #contact_fixed_sp.show { 16 display: inline-block; 17 } 18}

javascript

1$(window) 2 .on('scroll', function () { 3 var distanceTop = 100; 4 var $contactFixedSp = $('#contact_fixed_sp'); 5 6 if ($(window).scrollTop() > distanceTop) { 7 $contactFixedSp 8 .stop() 9 .fadeIn("slow", function () { 10 $(this) 11 .css({ display: '', opacity: '', }) 12 .addClass('show'); 13 }); 14 } 15 else { 16 $contactFixedSp 17 .stop() 18 .fadeOut("slow", function () { 19 $(this) 20 .css({ display: '', opacity: '', }) 21 .removeClass('show'); 22 }); 23 } 24 }) 25 .trigger('scroll');

https://jsfiddle.net/takmatz/x059mbjt/

投稿2017/07/14 10:33

編集2017/07/20 08:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yucchi

2017/07/18 01:24 編集

ありがとうございました。jQueryやjavascriptはまだダメダメで…本当に助かりました。ただこの場合だとブラウザーのサイズが480px以上の場合にも#contact_fixed_spが表示されてしまいます。
guest

0

CSSクラスによる指定(.invisible)と、JSによる制御では、JSの処理の方が勝ってしまいます。

html

1<div class="invisible" style="display:block;">これは表示されてしまう</div>

スクロールとリサイズイベントの両方で、表示制御のための同じ関数を呼ぶようにしてはどうでしょうか。
以下のようなイメージです。

js

1$(function(){ 2 var switchDisplay = function(){ 3 var element = $("#contact_fixed_sp"); 4 if( $(window).width() <= 480 && $(window).scrollTop() >= 100 ){ 5 element.stop(true, false).fadeIn("slow"); 6 }else{ 7 element.stop(true, false).fadeOut("slow"); 8 } 9 }; 10 $(window).on("resize scroll", switchDisplay); 11});

このようにすれば、invisibleクラスをつけたり外したりといった処理も不要になると思います。

投稿2017/07/20 06:49

USI

総合スコア53

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問