J'essaie d'utiliser la bibliothèque d'interface utilisateur de dialogue jQuery afin de positionner une boîte de dialogue à côté d'un texte lorsqu'il est survolé. La boîte de dialogue jQuery prend un paramètre de position qui est mesuré à partir du coin supérieur gauche de la fenêtre courante (en d'autres termes, le [0, 0]
placera toujours dans le coin supérieur gauche de la fenêtre de votre navigateur, quel que soit l'endroit où vous faites défiler actuellement). Cependant, le seul moyen que je connaisse pour récupérer l'emplacement est de l'élément relatif à la page ENTIER.
Voici ce que j'ai actuellement. position.top
est calculé pour être quelque chose comme 1200 ou plus, ce qui place la boîte de dialogue bien en dessous du reste du contenu de la page.
$(".mytext").mouseover(function() {
position = $(this).position();
$("#dialog").dialog('option', 'position', [position.top, position.left]);
}
Comment puis-je trouver la bonne position?
Merci!
Réponses:
Découvrez certains des plugins jQuery pour d'autres implémentations d'une boîte de dialogue. Cluetip semble être un plug-in de style info-bulle / dialogue riche en fonctionnalités. La 4ème démo ressemble à ce que vous essayez de faire (même si je vois qu'elle n'a pas l'option de positionnement précis que vous recherchez.)
la source
Comme alternative, vous pouvez utiliser l' utilitaire jQuery UI
Position
, par exemplela source
dialog
aimer ceci:$('#dialog').dialog({ width: 300 /* insert your options */ }).dialog('widget').position({ my: 'left', at: 'right', of: $(this) });
at: 'top+50'
au lieu deat: 'top + 50'
$('dialog').dialog({ position: { my: 'left top', at: 'left+50 top+50'}, });
Grâce à quelques réponses ci-dessus, j'ai expérimenté et finalement trouvé que tout ce que vous avez à faire est de modifier l'attribut "position" dans la définition de la boîte de dialogue modale:
JQuery n'a eu aucun problème avec le texte "du milieu" pour la valeur "X" horizontale et ma boîte de dialogue est apparue au milieu, 20px en bas du haut.
Je cœur JQuery.
la source
Après avoir lu toutes les réponses, cela a finalement fonctionné pour moi:
la source
Prenant l'exemple de Jaymin un peu plus loin, j'ai proposé ceci pour positionner un élément jQuery ui-dialog au-dessus de l'élément sur lequel vous venez de cliquer (pensez "bulle de dialogue"):
Notez que j'ouvre l'élément ui-dialog avant de calculer les décalages relatifs de largeur et de hauteur. Cela est dû au fait que jQuery ne peut pas évaluer externalWidth () ou outerHeight () sans que l'élément ui-dialog n'apparaisse physiquement dans la page.
Assurez-vous simplement de définir «modal» sur false dans vos options de dialogue et vous devriez être OK.
la source
myDialogX
etmyDialogY
http://docs.jquery.com/UI/API/1.8/Dialog
Exemple de dialogue fixe dans le coin supérieur gauche:
la source
Vérifier votre
<!DOCTYPE html>
J'ai remarqué que si vous manquez le
<!DOCTYPE html>
du haut de votre fichier HTML, la boîte de dialogue est affichée centrée dans le contenu du document et non dans la fenêtre, même si vous spécifiez la position: {my: 'center', at: 'center' , de: fenêtre}EG: http://jsfiddle.net/npbx4561/ - Copiez le contenu de la fenêtre d'exécution et supprimez le DocType. Enregistrez au format HTML et exécutez pour voir le problème.
la source
Pour le mettre juste au-dessus du contrôle, vous pouvez utiliser ce code:
la source
Positionne une boîte de dialogue juste sous un élément. J'ai utilisé la fonction offset () juste parce qu'elle calcule la position par rapport au coin supérieur gauche du navigateur, mais la fonction position () calcule la position par rapport au div parent ou iframe ce parent de l'élément.
la source
au lieu de faire jquery pur, je ferais:
si je comprends bien votre question, le code que vous avez positionne la boîte de dialogue comme si la page n'avait pas de défilement, mais vous voulez qu'elle prenne en compte le défilement. mon code devrait le faire.
la source
Cette page montre comment déterminer votre décalage de défilement. jQuery peut avoir des fonctionnalités similaires mais je ne l'ai pas trouvé. En utilisant la fonction getScrollXY affichée sur la page, vous devriez pouvoir soustraire les coordonnées x et y des résultats .position ().
la source
un peu tard mais vous pouvez le faire maintenant en utilisant $ j (object) .offset (). left et .top en conséquence.
la source
Je ne pense pas que la bulle de dialogue ait tout à fait raison. Je l'ai légèrement modifié pour que cela fonctionne et que l'élément s'ouvre juste sous le lien.
la source
Pour fixer la position centrale, j'utilise:
la source
Voici le code .., comment positionner la boîte de dialogue jQuery UI au centre ......
la source
la source
vous pouvez utiliser
$(this).offset()
, la position est liée au parentla source
J'ai essayé toutes les solutions proposées mais elles ne fonctionneront pas car la boîte de dialogue ne fait pas partie du document principal et aura sa propre couche (mais c'est ma supposition éclairée).
$("#dialog").dialog("option", "position", 'top')
$(dialog).dialog("open");
Ensuite, récupérez les x et y de la boîte de dialogue affichée (pas n'importe quel autre nœud du document!)
var xcoord = $(dialog).position().left + ADD_MODIFIER_FOR_X_HERE;
var ycoord= $(dialog).position().top + ADD_MODIFIER_FOR_Y_HERE;
$(dialog).dialog('option', 'position', [xcoord , ycoord]);
De cette façon, les coordonnées proviennent de la boîte de dialogue et non du document et la position est modifiée en fonction du calque de la boîte de dialogue.
la source
J'ai essayé de nombreuses façons d'obtenir mon dialogue centré sur la page et j'ai vu que le code:
$("#dialog").dialog("option", "position", 'top')
ne changez jamais la position de la boîte de dialogue lors de sa création.
Au lieu de, je change le niveau du sélecteur pour obtenir la boîte de dialogue entière.
$("#dialog").parent()
<- C'est l'objet parent que la fonction dialog () crée sur le DOM, c'est parce que le sélecteur $ ("# dialog") n'applique pas les attributs, en haut, à gauche.Pour centrer ma boîte de dialogue, j'utilise le plugin jQuery-Client-Centering-Plugin
$ ("# dialog"). parent (). centerInClient ();
la source
les solutions ci-dessus sont très vraies ... mais la boîte de dialogue de l'interface utilisateur ne conserve pas la position après le redimensionnement de la fenêtre. le code ci-dessous le fait
la source
Vous pouvez définir la position supérieure avec style pour l'affichage au centre, vu que le code:
.ui-dialog {haut: 100px! important;}
Ce style doit afficher la boîte de dialogue 100px ci-dessous à partir du haut.
la source