92 votes

Obtenir la position inférieure et droite d'un élément

J'essaie d'obtenir la position d'un élément dans la fenêtre comme suit :

var link = $(element);

var offset = link.offset();
var top = offset.top;
var left = offset.left;
var bottom = $(window).height() - link.height();
bottom = offset.top - bottom;
var right = $(window).width() - link.width();
right = offset.left - right;

Cependant, le bas et la droite ont - en face d'eux... Pourquoi cela ? Les chiffres sont corrects, mais ils ne devraient PAS être négatifs.

103voto

Mordhak Points 1543

Au lieu de

var bottom = $(window).height() - link.height();
bottom = offset.top - bottom;

Pourquoi ne faites-vous pas

var bottom = $(window).height() - top - link.height();

Edit : Votre erreur est que vous faites

bottom = offset.top - bottom;

au lieu de

bottom = bottom - offset.top; // or bottom -= offset.top;

37voto

Damian Points 21
var link = $(element);
var offset = link.offset();

var top = offset.top;
var left = offset.left;

var bottom = top + link.outerHeight();
var right = left + link.outerWidth();

4voto

Starx Points 38727

Vous pouvez utiliser le .position() pour cette

var link = $(element);
var position = link.position(); //cache the position
var right = $(window).width() - position.left - link.width();
var bottom = $(window).height() - position.top - link.height();

4 votes

Dans la documentation jQuery, il n'y a pas de référence à l'attribut "right" dans l'objet résultat pour position(). Doc ici

4 votes

Oui, mais il devrait s'agir de décalage au lieu de position, le décalage est en haut/à gauche selon le document, la position fait référence au parent.

0 votes

@Mordhak, Oui, mais comme vous pouvez le voir j'utilise windows.width() et similaires pour d'autres calculs également.

2voto

Ridle Points 51

J'ai écrit un petit plugin qui fait exactement cela.

Il obtient la position que vous souhaitez : gauche, droite, haut ou bas, par rapport à son parent ou au document HTML.

Vous pouvez le trouver sur mon github : https://github.com/Ridle/jQuery-getOffsets

1voto

kipid Points 35

Je pense

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<div>Testing</div>
<div id="result" style="margin:1em 4em; background:rgb(200,200,255); height:500px"></div>
<div style="background:rgb(200,255,200); height:3000px; width:5000px;"></div>

<script>
(function(){
    var link=$("#result");

    var top = link.offset().top; // position from $(document).offset().top
    var bottom = top + link.height(); // position from $(document).offset().top

    var left = link.offset().left; // position from $(document).offset().left
    var right = left + link.width(); // position from $(document).offset().left

    var bottomFromBottom = $(document).height() - bottom;
    // distance from document's bottom
    var rightFromRight = $(document).width() - right;
    // distance from document's right

    var str="";
    str+="top: "+top+"<br>";
    str+="bottom: "+bottom+"<br>";
    str+="left: "+left+"<br>";
    str+="right: "+right+"<br>";
    str+="bottomFromBottom: "+bottomFromBottom+"<br>";
    str+="rightFromRight: "+rightFromRight+"<br>";
    link.html(str);
})();
</script>

Le résultat est le suivant

top: 44
bottom: 544
left: 72
right: 1277
bottomFromBottom: 3068
rightFromRight: 3731

dans mon navigateur chromé.

Lorsque le document est défilable, $(window).height() renvoie la hauteur de la fenêtre du navigateur, et non la largeur du document dont certaines parties sont cachées par le scroll. Voir http://api.jquery.com/height/ .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X