###前提・実現したいこと
Lightboxのようにギャラリーページの画像をクリックでモーダルウインドウ(説明文)を表示したいです。
###発生している問題・エラーメッセージ
どうしてもIEでうまく表示されません。
http://coolwebwindow.com/jquery-lab/archives/352
↑上記のサイトを元に、リンクを画像にして作業すると
IE限定で、ポップアップが半分左に隠れた状態になります。
ブラウザを縮めると見えなくなります。
おそらくmodalResize()が問題かと思うのですが、解決できません。
html
1 2<!doctype html> 3<html> 4<head> 5<meta charset="utf-8"> 6<link rel="stylesheet" href="style.css"> 7<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 8<script src="modal.js"></script> 9<title>テスト</title> 10</head> 11<body> 12<a data-target="con1" class="modal-open"> 13 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 14</a> 15<a data-target="con2" class="modal-open"> 16 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 17</a> 18<a data-target="con3" class="modal-open"> 19 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 20</a> 21<!-- モーダル1 --> 22<div id="con1" class="modal-content" align="center"> 23 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""><img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""><img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 24<h3>テスト1</h3> 25<span>IE限定で左に画面半分くらいずれてしまう・・</span> 26<p><a class="modal-close">閉じる</a></p> 27</div> 28 29<!-- モーダル2 --> 30<div id="con2" class="modal-content" align="center"> 31 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""><img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 32 <h3>テスト2</h3> 33 <span>IE限定で左に画面半分くらいずれてしまう・・</span> 34 <p><a class="modal-close">閉じる</a></p> 35</div> 36 37<!-- モーダル3 --> 38<div id="con3" class="modal-content" align="center"> 39 <img src="https://www.fastpic.jp/index.php?module=preview&file=0328329757.jpg" alt=""> 40 <h3>テスト3</h3> 41 <span>IE限定で左に画面半分くらいずれてしまう・・</span> 42 <p><a class="modal-close">閉じる</a></p> 43</div> 44</body> 45</html>
css
1 2body { 3 margin:10px; 4 padding:10px; 5 border:10px solid #ddd; 6} 7 8.lock { 9 overflow:hidden; 10} 11 12.modal-content { 13 position:relative; 14 display:none; 15 width:50%; 16 margin:30px; 17 padding:10px 20px; 18 border:2px solid #aaa; 19 background:#fff; 20} 21 22.modal-content p { 23 margin:0; 24 padding:0; 25} 26 27.modal-overlay { 28 z-index:1; 29 display:none; 30 position:fixed; 31 top:0; 32 left:0; 33 width:100%; 34 height:120%; 35 background-color:rgba(0,0,0,0.75); 36} 37 38.modal-wrap { 39 z-index:2; 40 display:none; 41 position:fixed; 42 top:0; 43 left:0; 44 width:100%; 45 height:100%; 46 overflow:auto; 47} 48 49.modal-open { 50 color:#00f; 51 text-decoration:underline; 52} 53 54.modal-open:hover { 55 cursor:pointer; 56 color:#f00; 57} 58 59.modal-close { 60 color:#00f; 61 text-decoration:underline; 62} 63 64.modal-close:hover { 65 cursor:pointer; 66 color:#f00; 67} 68
javascript
1$(function(){ 2 // スクロールバーの横幅を取得 3 $('html').append('<div class="scrollbar" style="overflow:scroll;"></div>'); 4 var scrollsize = window.innerWidth - $('.scrollbar').prop('clientWidth'); 5 $('.scrollbar').hide(); 6 7 // 「.modal-open」をクリック 8 $('.modal-open').click(function(){ 9 // html、bodyを固定(overflow:hiddenにする) 10 $('html, body').addClass('lock'); 11 12 // オーバーレイ用の要素を追加 13 $('body').append('<div class="modal-overlay"></div>'); 14 15 // オーバーレイをフェードイン 16 $('.modal-overlay').fadeIn('slow'); 17 18 // モーダルコンテンツのIDを取得 19 var modal = '#' + $(this).attr('data-target'); 20 21 // モーダルコンテンツを囲む要素を追加 22 $(modal).wrap("<div class='modal-wrap'></div>"); 23 24 // モーダルコンテンツを囲む要素を表示 25 $('.modal-wrap').show(); 26 27 // モーダルコンテンツの表示位置を設定 28 modalResize(); 29 30 // モーダルコンテンツフェードイン 31 $(modal).fadeIn('slow'); 32 33 // モーダルコンテンツをクリックした時はフェードアウトしない 34 $(modal).click(function(e){ 35 e.stopPropagation(); 36 }); 37 38 // 「.modal-overlay」あるいは「.modal-close」をクリック 39 $('.modal-wrap, .modal-close').off().click(function(){ 40 // モーダルコンテンツとオーバーレイをフェードアウト 41 $(modal).fadeOut('slow'); 42 $('.modal-overlay').fadeOut('slow',function(){ 43 // html、bodyの固定解除 44 $('html, body').removeClass('lock'); 45 // オーバーレイを削除 46 $('.modal-overlay').remove(); 47 // モーダルコンテンツを囲む要素を削除 48 $(modal).unwrap("<div class='modal-wrap'></div>"); 49 }); 50 }); 51 52 // リサイズしたら表示位置を再取得 53 $(window).on('resize', function(){ 54 modalResize(); 55 }); 56 57 // モーダルコンテンツの表示位置を設定する関数 58 function modalResize(){ 59 // ウィンドウの横幅、高さを取得 60 var w = $(window).width(); 61 var h = $(window).height(); 62 63 // モーダルコンテンツの横幅、高さを取得 64 var mw = $(modal).outerWidth(true); 65 var mh = $(modal).outerHeight(true); 66 67 // モーダルコンテンツの表示位置を設定 68 if ((mh > h) && (mw > w)) { 69 $(modal).css({'left': 0 + 'px','top': 0 + 'px'}); 70 } else if ((mh > h) && (mw < w)) { 71 var x = (w - scrollsize - mw) / 2; 72 $(modal).css({'left': x + 'px','top': 0 + 'px'}); 73 } else if ((mh < h) && (mw > w)) { 74 var y = (h - scrollsize - mh) / 2; 75 $(modal).css({'left': 0 + 'px','top': y + 'px'}); 76 } else { 77 var x = (w - mw) / 2; 78 var y = (h - mh) / 2; 79 $(modal).css({'left': x + 'px','top': y + 'px'}); 80 } 81 } 82 83 }); 84});
###試したこと
chrome,firefox,スマホでの表示は正常なのを確認しております。
どうしてもIEだけうまくいきません。
モーダルウインドウ内の画像を2つ、3つにすると起きる現象で、パソコンの高さよりモーダルウインドウが低ければ起こりません。
どうかご教授願いたいです。
よろしくお願いします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/26 04:08