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

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

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

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

jQuery

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

Q&A

解決済

1回答

363閲覧

レスポンシブサイトでスクロールバーを含むウィンドウサイズで挙動を切り替えたい(ie8含む)

groco

総合スコア20

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/08/24 08:52

編集2017/08/24 09:16

レスポンシブサイトでスクロールバーを含むウィンドウサイズで動作を挙動を切り替えたいです。

cssではメディアクエリを使用して対応しているので
スクロールバーを含むウィンドウサイズで切り替える必要があるかと思うのですが、
window.innerWidth は ie8 に対応していないため
ie8 で対応できるよう下記のようなソースに書き換えて対応しました。

しかし、こちらに書き換えたらリサイズ時の切り替えができなくなってしまいました。

どのようにしたらリサイズ時にも対応できるようになるでしょうか。

javascript

1$(function(){ 2 var minWidth = 768; 3 var wWidth = window.innerWidth ? window.innerWidth : $(document).width(); 4 $(window).resize(function(){ 5 if (minWidth <= wWidth) { 6 $('.js_autoheight').removeAttr('style'); 7 $('.js_autoheight').autoHeight({height : 'height'}); 8 } 9 else { 10 $('.js_autoheight').removeAttr('style'); 11 } 12 }).trigger('resize'); 13}); 14 15$(function() { 16 var $elem = $('.js-image-switch'); 17 var sp = '_sp.'; 18 var pc = '_pc.'; 19 var replaceWidth = 768; 20 var wWidth = window.innerWidth ? window.innerWidth : $(document).width(); 21 22 function imageSwitch() { 23 var windowWidth = parseInt(wWidth); 24 $elem.each(function() { 25 var $this = $(this); 26 if(windowWidth >= replaceWidth) { 27 $this.attr('src', $this.attr('src').replace(sp, pc)); 28 29 } else { 30 $this.attr('src', $this.attr('src').replace(pc, sp)); 31 } 32 }); 33 } 34 imageSwitch(); 35 36 var resizeTimer; 37 $(window).on('resize', function() { 38 clearTimeout(resizeTimer); 39 resizeTimer = setTimeout(function() { 40 imageSwitch(); 41 }, 200); 42 }); 43});

何卒よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2017/08/25 00:42

ie8環境が手元にないので確認できませんが、ie8環境または別環境でエラーは出ていませんか?ie8の判定をuserAgentから判断させるように書き換えてみてはどうでしょうか?
groco

2017/08/29 03:16

せっかくアドバイスをいただいたにも関わらず、諸事情により連絡が遅くなってしまい申し訳ございません。。。ie8でも他のブラウザでもエラーは出ていないようでした。アドバイスいただいた「ie8の判定をuserAgentから判断させるように」という方法を一度試してみたいと思います!
guest

回答1

0

ベストアンサー

js

1$(function(){ 2 var minWidth = 768; 3 var wWidth = window.innerWidth ? window.innerWidth : $(document).width(); 4 $(window).resize(function(){ 5 if (minWidth <= wWidth) { 6 ...

としてしまうと、wWidthの値は、$(function())の実行時、すなわち、ドキュメント読み込み時に一度代入されるだけになってしまいますね。よって、ドキュメント読み込み時のウィンドウサイズがその後の判定でもずっと使われてしまうため、リサイズしても切り替えが効かないのだと思います。

目的は、ウィンドウのリサイズ時にその時点でのサイズに応じて挙動を変えることですので、$(window).resize(function())の中でサイズをチェックするとよいのではと思います。例えば、

js

1$(function(){ 2 var minWidth = 768; 3 $(window).resize(function(){ 4 var wWidth = window.innerWidth ? window.innerWidth : $(document).width(); 5 if (minWidth <= wWidth) { 6 ...

でしょうか。

後半の部分も同様で、例えば、実際にサイズに応じて切り替えを行うimageSwitch関数の中でサイズを取得すれば良いので、

js

1$(function() { 2 var $elem = $('.js-image-switch'); 3 var sp = '_sp.'; 4 var pc = '_pc.'; 5 var replaceWidth = 768; 6 7 function imageSwitch() { 8 var wWidth = window.innerWidth ? window.innerWidth : $(document).width(); 9 var windowWidth = parseInt(wWidth); 10 ...

のようにすると良いのではと思います。

投稿2017/08/25 01:30

編集2017/08/25 01:34
othersight

総合スコア356

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

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

groco

2017/08/29 03:28

せっかく回答をいただいたにも関わらず、諸事情により連絡が遅くなってしまい申し訳ございません。。。 教えていただいた通り修正したところ、無事に動く事が確認できました! 詳しく説明もつけていただきありがとうございます。 確かにご指摘いただいた通り、ウィンドウサイズの取得を完了した後にリサイズの記述をしているので、リサイズしても反応しませんよね。。。 今後は記述の順番にも注意したいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問