切り取ったビットhttp://pastebin.com/bD2g3SqL
編集:
これは機能しますが、offsetX および offsetY プロパティにアクセスする方法をまだ見つけていません。何らかの理由で、イベントの FF バージョンにはそれらが含まれていません。
<!DOCTYPE html>
<html>
<head>
<title>TH Drag Test</title>
<style>
table,td,th {
border: solid thin black;
}
</style>
<script>
function Init(){
var n= document.getElementsByTagName("th");
var j=0;
for (var i=0; i<n.length; i++){
n[i].addEventListener('drag', function (e){
document.getElementById("lbl").textContent= j++;
}, false);
}
for (var i=0; i<n.length; i++){
n[i].addEventListener('dragstart', function (e){
e.dataTransfer.setData('text/plain', 'node');
}, false);
}
}
</script>
</head>
<body onload="Init();">
<span id="lbl"></span>
<table>
<thead>
<tr>
<th draggable="true">Column A</th>
<th draggable="true">Column B</th>
</tr>
</thead>
<tbody>
<tr>
<td>One</td>
<td>Two</td>
</tr>
<tr>
<td>Three</td>
<td>Four</td>
</tr>
</tbody>
</table>
</body>
</html>
どうやら、あなたがする必要があるのは、ドラッグを「初期化」することです( source .)
EDIT2:
どうやら、clientX および clientY プロパティ ( source )を更新しないドラッグ イベント (go figure) にバグがあるようです。それらは、dragover イベントなどの他のイベントで更新されますが、そのイベントは、オブジェクトが実行されている間のみ発生します。もっともらしいドロップターゲットにドラッグされました。このようなばかげた状況から抜け出す方法は、次のような大雑把なものです。
<!DOCTYPE html>
<html>
<head>
<title>TH Drag Test</title>
<style>
table,td,th {
border: solid thin black;
}
</style>
<script>
var down= false;
document.onmousemove= OnMouseMove;
function Init(){
var n= document.getElementsByTagName('th');
for (var i=0; i<n.length; i++){
n[i].onmousedown= OnMouseDown;
}
document.onmouseup= OnMouseUp;
}
function OnMouseDown(e){
down= true;
}
function OnMouseUp(e){
down= false;
}
function OnMouseMove(e){
if (!down) return;
document.getElementById('lbl').textContent= e.pageX ? ('x: ' + e.pageX + ' y: ' + e.pageY) : ('x: ' + (e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft) + ' y: ' + (e.clientY + document.documentElement.scrollTop + document.body.scrollTop));
}
</script>
</head>
<body onload="Init();">
<span id="lbl"></span>
<table>
<thead>
<tr>
<th draggable="true">Column A</th>
<th draggable="true">Column B</th>
</tr>
</thead>
<tbody>
<tr>
<td>One</td>
<td>Two</td>
</tr>
<tr>
<td>Three</td>
<td>Four</td>
</tr>
</tbody>
</table>
</body>
</html>