jQueryのoffset()を使ってboxの表示位置をコントロールするコードを書いてみているのですが
特定の条件で、表示位置がずれてしまいます。
書いたコードは下記の通りです。
<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> </head> <body> テスト <div id="win1" style="border:solid; height: 300px; width: 400px; position: absolute; top:50px; left:100px; "> ほげほげ <div> <span> <button class="show_win2_button">表示1</button> </span> </div> <div style="position:relative; top:20px; left:20px;"> <span> <button class="show_win2_button">表示2</button> </span> </div> <div style="position:relative; top:100px; left:70px;"> <span> <button class="show_win2_button">表示3</button> </span> </div> <div style="position:relative; top:160px; left:250px;"> <span> <button class="show_win2_button">表示4</button> </span> </div> </div> <div id="win2" style="border:solid; height: 400px; width: 200px; position: absolute; top:0px; left:0px; display:none; z-index:10; background-color:#EDF7FF;"> ぱよぱよ <div><button id="close_button">閉じる</button></div> </div> <script> $(function() { $('.show_win2_button').on('click', function () { self = this; $button = $(self).parent(); $win2 = $('#win2'); $win2.offset({ top: $button.offset().top + $button.height(), left: $button.offset().left + $button.width() }); $win2.show(); }); $('#close_button').on('click', function() { $('#win2').hide(); }); }); </script> </body> </html>
表示1から表示4までのボタンを押すと、そのボタンの右下の位置にid="win2"のboxが表示されるという意図のものです。
表示1から表示4までのボタンだけを押し続けているうちは、うまく機能しているように見えます。
しかし、id="win2"のbox内に作った「閉じる」ボタンをクリックしてid="win2"のboxを非表示にしたあと、
再度、表示1から表示4のいずれかのボタンを押すと、win2のboxの表示位置が右下の方へずれて表示されてしまいます。
「閉じる」ボタンでは jQuery の hide() を呼んでいるだけなので、その後、win2のboxを表示したときに
右下へとずれてしまう理由が分からず、困っております。
恐縮ですが、解決方法を教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/09 09:01