jQuery UIのDrag&Dropとスクロール
IE6.0で生じる不具合を見つけた。FirefoxとSafariでは起きない。IE7はインストールしていないので不明。
画面をスクロールしてからdragすると、スクロール量だけずれてdrag対象が表示されてしまう。
以下が最少例。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="text/javascript" src="jquery-1.2.6.min.js"></script> <script type="text/javascript" src="jquery-ui-personalized-1.6rc2.js"></script> <script type="text/javascript">// <![CDATA[ $(document).ready(function() { $('#drag').draggable({revert:true, cursor:'pointer'}); $('#drag').draggable('enable'); }); // ]]></script> </head> <body> <div style="height:1200px;"></div> <span id="drag">Draggable</span> </body> </html>
jQuery UIの最新版1.6rc2の代わりにリポジトリの今日の最新のものを使ってみると、この現象は起きなくなった。しかし別の不具合が発生した。
一つは、draggableのfont-sizeを100%より大きな値にすると、dragした後で文字が滲んだように太くなる。これはIE6.0だけ。
もう一つは、画面をスクロールするとdroppableにdropできなくなる。これはIE6.0, Firefox, Safariのすべてで起きる。
以下がその例。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <script type="text/javascript" src="jquery-1.2.6.min.js"></script> <script type="text/javascript" src="jquery-ui-personalized-1.6-latest.js"></script> <script type="text/javascript">// <![CDATA[ $(document).ready(function() { $('#drag').draggable({revert:true, cursor:'pointer'}); $('#drag').draggable('enable'); $('#drop').droppable({ tolerance:'pointer', accept:'#drag', hoverClass:'droppable_active', drop: function(ev,ui) { alert("drop"); } }); $('#drop').droppable('enable'); }); // ]]></script> <style type="text/css"> .droppable_active { background-color:#90EE90; } </style> </head> <body> <div style="height:1200px;"></div> <span id="drag" style="font-size:150%;">Draggable</span> <hr/> <span id="drop">Droppable</span> </body> </html>
Drag&Dropしたい画面ではスクロールのない画面構成にするか、IE6.0を諦めるか、の選択肢しかなくなった。