javascriptにてレスポンシブで表示する画像を切り替えたく考えています。
いろいろ調べてみて下記のサイトを参考にしてみたのですがどうもうまく行かずに悩んでおります。
https://try-m.co.jp/blog/web-create/510/
スマホサイズの559pxまでとタブレットの559〜959px、PCサイズの960px以上の三つでサイズ調整がうまくいきません。
スクリプトもあまり詳しくないためどこを書き換えていいかがわからずにいます。
スマホではファイルの先頭をmb_、タブレットではtb_、パソコンではpc_に変えてレスポンシブで画像を変更できるような動きをするためにはどのようにすれば良いのでしょうか?
現状の動きですと、pcからtb_、mb_までのブラウザサイズ変更でそぞれ画像が切り替わるのですが、ブラウザサイズを戻した際に画像の切り替えができずどのサイズでもmb_のままになってしまいます。
説明が苦手で申し訳ありませんが、ご教授していただけると助かります。
html
1<img src="pc_test" class="tb">
javascript
1 jQuery(function ($) { 2 $(window).on('load resize', function(){ 3 4 var $windowWidth = window.innerWidth 5 var $breakPointA = 560; //画像を差し替えを実行するウィンドウサイズ 6 var $breakPointB = 959; 7 var isMobileSize = ($windowWidth < $breakPointA); 8 var isTabletSize = ($windowWidth <= $breakPointB) && ($windowWidth > $breakPointA); 9 var isPcSize = ($windowWidth > $breakPointB); 10 11 if (isTabletSize) { 12 13 var before = 'pc_', 14 before2 = 'mb_', 15 after = 'tb_'; 16 17 replaceImg(); 18 19 } else if (isMobileSize) { 20 21 var before = 'tb_', 22 before2 = 'pc_', 23 after = 'mb_'; 24 25 replaceImg(); 26 27 } else if (isPcSize) { 28 29 var before = 'tb_', 30 before2 = 'mb_', 31 after = 'pc_'; 32 33 replaceImg(); 34 35 } 36 37 function replaceImg(){ 38 $('.tb[src*=pc_],.tb[src*=tb_],.tb[src*=mb_]').each(function(){ 39 var img = $(this).attr('src').replace(before, after); 40 if( $(this).attr('src').match(before,before2) ) { 41 $(this).attr('src', img); 42 } 43 }); 44 } 45 46}) 47 });
下記のコードの通り条件分岐を追加したらリサイズはうまくいくようになったのですが、画面幅を変えた時にしかスクリプトが動かずにいます。
load resizeをつけているのですがどこが間違っているのかわからずにいます。
javascript
1 jQuery(function ($) { 2 $(window).on('load resize', function(){ 3 4 var $windowWidth = window.innerWidth 5 var $breakPointA = 560; //画像を差し替えを実行するウィンドウサイズ 6 var $breakPointB = 959; 7 var isMobileSize = ($windowWidth < $breakPointA); 8 var isTabletSize = ($windowWidth <= $breakPointB) && ($windowWidth > $breakPointA); 9 var isPcSize = ($windowWidth > $breakPointB); 10 11 if (isTabletSize) { 12 13 var before = 'pc_', 14 before2 = 'mb_', 15 after = 'tb_'; 16 17 replaceImg(); 18 19 } else if (isMobileSize) { 20 21 var before = 'tb_', 22 before2 = 'tb_', 23 after = 'mb_'; 24 25 replaceImg(); 26 27 } else if (isPcSize) { 28 29 var before = 'tb_', 30 before2 = 'mb_', 31 after = 'pc_'; 32 33 replaceImg(); 34 35 } 36 37 function replaceImg(){ 38 $('.tb[src*=pc_],.tb[src*=tb_],.tb[src*=mb_]').each(function(){ 39 var img = $(this).attr('src').replace(before, after); 40 var img2 = $(this).attr('src').replace(before2, after); 41 if( $(this).attr('src').match(before) ) { 42 $(this).attr('src', img); 43 } 44 else if( $(this).attr('src').match(before2) ) { 45 $(this).attr('src', img2); 46 } 47 }); 48 } 49 50}) 51 });
回答1件
あなたの回答
tips
プレビュー