簡易Drag&Drop ver.0.0.1
ライブラリの多くは id を用いて Drag&Dropを行なう要素を指定するが id はドキュメントにたいしてユニークではないといけないなど制約があり面倒ということで,id を用いないで div などの要素を Drag&Drop できるようにする.なお,Firefoxのみでの動作確認.
div の領域にマウスがかかったら, onmouseover にて,drag と drop をするイベントリスナーを追加し,omouseout で,それぞれのリスナーを削除する.
var div;
function addXY(erea) {
div = erea;
document.addEventListener('mousedown',start,true);
}
function removeXY() {
document.removeEventListener('mousedown',start,true);
}
function start(e) {
this.ex = e.clientX - parseInt(div.style.left); /* マウスと左上の点との差分*/
this.ey = e.clientY - parseInt(div.style.top);
document.addEventListener('mousemove',drag,true);
document.addEventListener('mouseup',end,true);
this.opacity = div.style.opacity; /* 現在の半透明状態をキャッシュ*/
div.style.opacity = this.opacity * 0.4; /* 表示を半透明にする */
}
function drag(e) {
var dx = e.clientX - this.ex;
var dy = e.clientY - this.ey;
if(dx < 0) dx = 1;
if(dy < 0) dy = 1;
div.style.left = dx + 'px';
div.style.top = dy + 'px';
}
function end(e) {
div.style.opacity = this.opacity;
document.removeEventListener('mousemove',drag,true);
document.removeEventListener('mouseup',end,true);
}
div の領域にマウスがかかったら, onmouseover にて,drag と drop をするイベントリスナーを追加し,omouseout で,それぞれのリスナーを削除する.
ToDo
- 気が向いたらその他のブラウザでの動作も行なえるようにする.
- onload 時に document 内に特定のクラスがある場合には, onmouseover, onmouseout での動作を付け加えるようにする関数を定義してもよいだろうか?