Salut,
voilà un exemple réduit au minimum :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| function getMouseCoords(evnt){
if(window.event) {
evnt = window.event;
}
// Gecko
if(evnt.pageX || evnt.pageY) {
return {x:evnt.pageX, y:evnt.pageY};
}
// IE
else if(evnt.clientX || evnt.clientY) {
return {x:evnt.clientX + document.body.scrollLeft - document.body.clientLeft, y:evnt.clientY + document.body.scrollTop - document.body.clientTop};
}
}
function Box() {
this.isDraggable = false;
// Composants graphiques
this.mainPanel = document.createElement('div');
this.mainPanel.style.position = 'absolute';
this.mainPanel.style.backgroundColor = '#ECE9D8';
this.message = document.createElement('p');
this.mainPanel.style.width = 300;
this.mainPanel.onmousedown = function(evnt) {
var mousePos = getMouseCoords(evnt);
window.box.isDraggable = true;
window.box.mainPanel.xOffset = mousePos.x - window.box.mainPanel.offsetLeft;
window.box.mainPanel.yOffset = mousePos.y - window.box.mainPanel.offsetTop;
}
document.onmouseup = function() {
if(window.box != null) {
window.box.isDraggable = false;
}
}
document.onmousemove = function(evnt) {
if(window.box != null && window.box.isDraggable == true) {
var mousePos = getMouseCoords(evnt);
window.box.mainPanel.style.left = mousePos.x - window.box.mainPanel.xOffset;
window.box.mainPanel.style.top = mousePos.y - window.box.mainPanel.yOffset;
}
}
// Message
this.message.innerHTML = "message";
this.mainPanel.appendChild(this.message);
document.body.appendChild(this.mainPanel);
}
window.box = new Box(); |
Si tu ne veux pas que le div bouge quand on clique un élément enfant je te conseille d'ajouter un div de titre et de modifier :
this.mainPanel.onmousedown = etc
par :
this.titlePanel.onmousedown = etc
Bye
(précision : j'ai codé ce truc pour simuler des fenêtres d'alert et est donc destiné à la base à créer un seul élément draggable et à le détruire. Pour gérer plusieurs éléments la méthode est un peu différente)
Partager