Okay it would seem like it should be simple. I need to take an already existing div and move it according to mouse position within the window. I have searched everywhere and it has led me to over-complicated ways of doing the same thing and involves the use of j-query. I need to strictly use javascript for what I am trying to do.
Method :
JavaScript
x
39
39
1
var mousePosition;
2
var div;
3
4
(function createDiv(){
5
6
div = document.createElement("div");
7
div.style.position = "absolute";
8
div.style.left = "0px";
9
div.style.top = "0px";
10
div.style.width = "100px";
11
div.style.height = "100px";
12
div.style.background = "red";
13
div.style.color = "blue";
14
15
div.addEventListener('mousedown', handleKeyPressed, true);
16
17
document.body.appendChild(div);
18
19
20
})();
21
22
function handleKeyPressed(event) {
23
24
event.preventDefault();
25
26
mousePosition = {
27
28
x : event.clientX,
29
y : event.clientY
30
31
};
32
33
div.style.left = mousePosition.x;
34
div.style.top = mousePosition.y;
35
36
//alert("whoa!");
37
38
}
39
Advertisement
Answer
I think you’re looking for something more like this
JavaScript
1
42
42
1
var mousePosition;
2
var offset = [0,0];
3
var div;
4
var isDown = false;
5
6
div = document.createElement("div");
7
div.style.position = "absolute";
8
div.style.left = "0px";
9
div.style.top = "0px";
10
div.style.width = "100px";
11
div.style.height = "100px";
12
div.style.background = "red";
13
div.style.color = "blue";
14
15
document.body.appendChild(div);
16
17
div.addEventListener('mousedown', function(e) {
18
isDown = true;
19
offset = [
20
div.offsetLeft - e.clientX,
21
div.offsetTop - e.clientY
22
];
23
}, true);
24
25
document.addEventListener('mouseup', function() {
26
isDown = false;
27
}, true);
28
29
document.addEventListener('mousemove', function(event) {
30
event.preventDefault();
31
if (isDown) {
32
mousePosition = {
33
34
x : event.clientX,
35
y : event.clientY
36
37
};
38
div.style.left = (mousePosition.x + offset[0]) + 'px';
39
div.style.top = (mousePosition.y + offset[1]) + 'px';
40
}
41
}, true);
42