rev |
line source |
bsw/jbe@5
|
1 window.addEventListener("load", function(event) {
|
bsw/jbe@5
|
2 var originalElement;
|
bsw/jbe@5
|
3 var draggedElement;
|
bsw/jbe@5
|
4 var mouseX;
|
bsw/jbe@5
|
5 var mouseY;
|
bsw/jbe@5
|
6 var mouseOffsetX;
|
bsw/jbe@5
|
7 var mouseOffsetY;
|
bsw/jbe@5
|
8 var elementOffsetX;
|
bsw/jbe@5
|
9 var elementOffsetY;
|
bsw/jbe@5
|
10 var dropFunc;
|
bsw/jbe@5
|
11 var dragElement = function(element, func) {
|
bsw/jbe@5
|
12 //if (typeof(element) == "string") element = document.getElementById(element);
|
bsw/jbe@5
|
13 originalElement = element;
|
bsw/jbe@5
|
14 draggedElement = originalElement.cloneNode(true);
|
bsw/jbe@5
|
15 originalElement.style.visibility = "hidden";
|
bsw/jbe@5
|
16 draggedElement.style.margin = 0;
|
bsw/jbe@5
|
17 draggedElement.style.position = "absolute";
|
bsw/jbe@5
|
18 draggedElement.style.left = elementOffsetX = originalElement.offsetLeft;
|
bsw/jbe@5
|
19 draggedElement.style.top = elementOffsetY = originalElement.offsetTop;
|
bsw/jbe@5
|
20 draggedElement.style.width = originalElement.clientWidth;
|
bsw/jbe@5
|
21 draggedElement.style.height = originalElement.clientHeight;
|
bsw/jbe@5
|
22 draggedElement.style.backgroundColor = "#eee";
|
bsw/jbe@5
|
23 draggedElement.style.opacity = 0.8;
|
bsw/jbe@5
|
24 originalElement.offsetParent.appendChild(draggedElement);
|
bsw/jbe@5
|
25 // workaround for wrong clientWidth and clientHeight information:
|
bsw/jbe@5
|
26 draggedElement.style.width = 2*originalElement.clientWidth - draggedElement.clientWidth;
|
bsw/jbe@5
|
27 draggedElement.style.height = 2*originalElement.clientHeight - draggedElement.clientHeight;
|
bsw/jbe@5
|
28 mouseOffsetX = mouseX;
|
bsw/jbe@5
|
29 mouseOffsetY = mouseY;
|
bsw/jbe@5
|
30 dropFunc = func;
|
bsw/jbe@5
|
31 };
|
bsw/jbe@5
|
32 window.addEventListener("mousemove", function(event) {
|
bsw/jbe@5
|
33 mouseX = event.pageX;
|
bsw/jbe@5
|
34 mouseY = event.pageY;
|
bsw/jbe@5
|
35 if (draggedElement) {
|
bsw/jbe@5
|
36 draggedElement.style.left = elementOffsetX + mouseX - mouseOffsetX;
|
bsw/jbe@5
|
37 draggedElement.style.top = elementOffsetY + mouseY - mouseOffsetY;
|
bsw/jbe@5
|
38 }
|
bsw/jbe@5
|
39 }, true);
|
bsw/jbe@5
|
40 var mouseDrop = function(event) {
|
bsw/jbe@5
|
41 if (draggedElement) {
|
bsw/jbe@5
|
42 dropFunc(
|
bsw/jbe@5
|
43 originalElement,
|
bsw/jbe@5
|
44 elementOffsetX + mouseX - mouseOffsetX,
|
bsw/jbe@5
|
45 elementOffsetY + mouseY - mouseOffsetY
|
bsw/jbe@5
|
46 );
|
bsw/jbe@5
|
47 originalElement.style.visibility = '';
|
bsw/jbe@5
|
48 draggedElement.parentNode.removeChild(draggedElement);
|
bsw/jbe@5
|
49 originalElement = null;
|
bsw/jbe@5
|
50 draggedElement = null;
|
bsw/jbe@5
|
51 }
|
bsw/jbe@5
|
52 };
|
bsw/jbe@5
|
53 window.addEventListener("mouseup", mouseDrop, true);
|
bsw/jbe@5
|
54 window.addEventListener("mousedown", mouseDrop, true);
|
bsw/jbe@5
|
55 var elements = document.getElementsByTagName("*");
|
bsw/jbe@5
|
56 for (var i=0; i<elements.length; i++) {
|
bsw/jbe@5
|
57 var element = elements[i];
|
bsw/jbe@5
|
58 if (element.className == "movable") {
|
bsw/jbe@5
|
59 element.addEventListener("mousedown", function(event) {
|
bsw/jbe@5
|
60 event.target.style.cursor = "move";
|
bsw/jbe@5
|
61 dragElement(event.currentTarget, function(element, dropX, dropY) {
|
bsw/jbe@6
|
62 event.target.style.cursor = '';
|
bsw/jbe@5
|
63 elementDropped(element, dropX, dropY);
|
bsw/jbe@5
|
64 });
|
bsw/jbe@5
|
65 event.preventDefault();
|
bsw/jbe@5
|
66 }, false);
|
bsw/jbe@5
|
67 } else if (element.className == "clickable") {
|
bsw/jbe@5
|
68 element.addEventListener("mousedown", function(event) {
|
bsw/jbe@5
|
69 event.stopPropagation();
|
bsw/jbe@5
|
70 }, false);
|
bsw/jbe@5
|
71 }
|
bsw/jbe@5
|
72 }
|
bsw/jbe@5
|
73 }, false);
|