Comment déplacer un div HTML avec la souris en JavaScript ?
Réponses rédigées par Antoine
Dernière mise à jour : 2022-09-20 12:35:14
Question
Bonjour, je voudrais déplacer un div HTML avec la souris. Il faudrait qu'on puisse cliquer sur le div pour ensuite le déplacer sans pour autant qu'il puisse sortir de la fenêtre. J'aimerai également que le div reste fixe lorsqu'on défile la page. Merci.
Réponse
Pour déplacer une balise <div> HTML avec la souris, en JavaScript, vous devez entre autre effectuer les opérations suivantes :
- Utiliser l'interface
MouseEventpour détecter les évènements liés au pointeur de la souris. - Récupérer les coordonnées du pointeur avec les propriétés
clientXetclientY. - Récupérer la taille du
viewportavec les propriétésclientWidthetclientHeight.
Voici comment déplacer un div HTML avec la souris en JavaScript :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Comment déplacer un div HTML avec la souris en JavaScript ?</title>
<style>
#laDiv {
position: absolute;
z-index: 1000;
border: 1px solid #000;
}
#laDiv_titre {
padding: 10px;
cursor: move;
text-align: center;
z-index: 1001;
background-color: #CCC;
color: #000;
}
#laDiv_contenu {
padding: 10px;
z-index: 1001;
background-color: #DDD;
color: #000;
}
</style>
</head>
<body>
<div id="laDiv">
<div id="laDiv_titre">Titre</div>
<div id="laDiv_contenu">Contenu</div>
</div>
<script>
function deplacerDiv(id) {
var pos1 = pos2 = pos3 = pos4 = 0;
if (document.getElementById("laDiv_titre")) {
document.getElementById("laDiv_titre").onmousedown = relacherSouris;
} else {
id.onmousedown = relacherSouris;
}
function relacherSouris(e) {
e = e || window.event;
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = arretDeplacement;
document.onmousemove = debutDeplacement;
}
function debutDeplacement(e) {
e = e || window.event;
e.preventDefault();
var winW = document.documentElement.clientWidth || document.body.clientWidth,
winH = document.documentElement.clientHeight || document.body.clientHeight;
maxX = winW - id.offsetWidth - 1,
maxY = winH - id.offsetHeight - 1;
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
if ((id.offsetTop - pos2) <= maxY && (id.offsetTop - pos2) >= 0) {
id.style.top = (id.offsetTop - pos2) + "px";
}
if ((id.offsetLeft - pos1) <= maxX && (id.offsetLeft - pos1) >= 0) {
id.style.left = (id.offsetLeft - pos1) + "px";
}
}
function arretDeplacement() {
document.onmouseup = null;
document.onmousemove = null;
id.style.position = "fixed";
}
}
deplacerDiv(document.getElementById("laDiv"));
</script>
</body>
</html>
Remarque : Vous noterez la ligne id.style.position = "fixed"; dans la fonction arretDeplacement() ; elle permet de fixer la balise <div> lors du scroll de la fenêtre.