Comment positionner un DIV dans des coordonnées spécifiques?

120

Je veux positionner un DIV dans des coordonnées spécifiques? Comment puis-je faire cela en utilisant Javascript?

Adham
la source

Réponses:

170

Script ses propriétés leftet topcomme le nombre de pixels respectivement du bord gauche et du bord supérieur. Il doit avoirposition: absolute;

var d = document.getElementById('yourDivId');
d.style.position = "absolute";
d.style.left = x_pos+'px';
d.style.top = y_pos+'px';

Ou faites-le en tant que fonction pour pouvoir l'attacher à un événement comme onmousedown

function placeDiv(x_pos, y_pos) {
  var d = document.getElementById('yourDivId');
  d.style.position = "absolute";
  d.style.left = x_pos+'px';
  d.style.top = y_pos+'px';
}
Michael Berkowski
la source
Je récupère les coordonnées x, y d'un clic de souris, comment puis-je afficher le Div à la position de la souris?
Adham
@adham vous avez déjà les coordonnées x, y? Il suffit de les appliquer à la place de x_pos,y_pos
Michael Berkowski
il arrondit toujours la position ... est-il possible de définir une position comme 1.6 au lieu de devenir 2 ou 1.
Muhammad Umer
et si nous avons des coordonnées, (x1, y2) (x2, y2) (x3, y3) (x4, y4)?
John dey
Je fais exactement la même chose mais mon div ne se positionne pas près de la coordonnée de ma souris. Cependant, il se déplace vers la position de départ supérieure de la page principale après l'en-tête. Je veux dire la division principale. Quelqu'un peut-il m'aider à comprendre pourquoi?
JNPW
32

Vous n'êtes pas obligé d'utiliser Javascript pour cela. En utilisant un css simple:

div.blah {
  position:absolute;
  top: 0; /*[wherever you want it]*/
  left:0; /*[wherever you want it]*/
}

Si vous pensez que vous devez utiliser javascript, ou si vous essayez de le faire dynamiquement en utilisant JQuery, cela affecte toutes les div de la classe "blah":

var blahclass =  $('.blah'); 
blahclass.css('position', 'absolute');
blahclass.css('top', 0); //or wherever you want it
blahclass.css('left', 0); //or wherever you want it

Alternativement, si vous devez utiliser du javascript ancien, vous pouvez récupérer par identifiant

var domElement = document.getElementById('myElement');// don't go to to DOM every time you need it. Instead store in a variable and manipulate.
domElement.style.position = "absolute";
domElement.style.top = 0; //or whatever 
domElement.style.left = 0; // or whatever
Dave
la source
quoi? vous devriez utiliser .class au lieu de myElement et top & left au lieu de x & y, n'est-ce pas?
TMS
En plus d'obtenir une référence à un élément HTML avec document.getElemtentById(), vous pouvez également le référencer avec un sélecteur arbitraire de type jQuery avec document.querySelector () et ses nombreuses variantes
Shammel Lee
9

Eh bien, cela dépend si tout ce que vous voulez est de positionner un div et rien d'autre, vous n'avez pas besoin d'utiliser un script java pour cela. Vous ne pouvez y parvenir que par CSS. Ce qui compte, c'est par rapport au conteneur dans lequel vous voulez positionner votre div, si vous voulez le positionner par rapport au corps du document, votre div doit être positionné de manière absolue et son conteneur ne doit pas être positionné de manière relative ou absolue, dans ce cas votre div sera positionné par rapport au conteneur.

Sinon, avec Jquery, si vous souhaitez positionner un élément par rapport au document, vous pouvez utiliser la méthode offset ().

$(".mydiv").offset({ top: 10, left: 30 });

s'il est relatif à la position parent offset, le parent relatif ou absolu. puis utilisez ce qui suit ...

var pos = $('.parent').offset();
var top = pos.top + 'no of pixel you want to give the mydiv from top relative to parent';
var left = pos.left + 'no of pixel you want to give the mydiv from left relative to parent';

$('.mydiv').css({
  position:'absolute',
  top:top,
  left:left
});
Ehtesham
la source
Super @Ehtesham Cela m'a vraiment aidé.
RN Kushwaha
2

Vous pouvez également utiliser la propriété css à position fixe.

<!-- html code --> 
<div class="box" id="myElement"></div>

/* css code */
.box {
    position: fixed;
}

// js code

document.getElementById('myElement').style.top = 0; //or whatever 
document.getElementById('myElement').style.left = 0; // or whatever
Pankaj Bisht
la source
2

Voici un article correctement décrit et également un exemple avec du code. Coordonnées JS

Selon l'exigence. ci-dessous est le code qui est enfin posté dans cet article. Besoin d'appeler la fonction getOffset et de transmettre l'élément html qui renvoie ses valeurs supérieure et gauche .

function getOffsetSum(elem) {
  var top=0, left=0
  while(elem) {
    top = top + parseInt(elem.offsetTop)
    left = left + parseInt(elem.offsetLeft)
    elem = elem.offsetParent        
  }

  return {top: top, left: left}
}


function getOffsetRect(elem) {
    var box = elem.getBoundingClientRect()

    var body = document.body
    var docElem = document.documentElement

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft

    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0

    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return { top: Math.round(top), left: Math.round(left) }
}


function getOffset(elem) {
    if (elem.getBoundingClientRect) {
        return getOffsetRect(elem)
    } else {
        return getOffsetSum(elem)
    }
}
Sanket Patel
la source
0

J'ai cribbed ceci et ai ajouté le «px»; Fonctionne très bien.

function getOffset(el) {
  el = el.getBoundingClientRect();
  return {
    left: (el.right + window.scrollX ) +'px',
    top: (el.top + window.scrollY ) +'px'
  }
}
to call: //Gets it to the right side
 el.style.top = getOffset(othis).top ; 
 el.style.left = getOffset(othis).left ; 
Greggo
la source