Ich versuche das zu benutzen jQuery-Dialog-UI- Bibliothek zu verwenden, um ein Dialogfeld neben einem Text zu positionieren, wenn der Mauszeiger darüber bewegt wird. Das jQuery-Dialogfeld verwendet einen Positionsparameter, der in der oberen linken Ecke des aktuellen Ansichtsfensters gemessen wird (mit anderen Worten, [0, 0]
wird immer in der oberen linken Ecke Ihres Browserfensters platziert, unabhängig davon, wohin Sie gerade gescrollt haben). Die einzige Möglichkeit, die Position abzurufen, ist das Element relativ zur GESAMTEN Seite.
Folgendes habe ich derzeit. position.top
wird auf ungefähr 1200 berechnet, wodurch der Dialog weit unter dem Rest des Inhalts auf der Seite liegt.
$(".mytext").mouseover(function() {
position = $(this).position();
$("#dialog").dialog('option', 'position', [position.top, position.left]);
}
Wie finde ich die richtige Position?
Vielen Dank!
Antworten:
Schauen Sie sich einige der jQuery-Plugins für andere Implementierungen eines Dialogfelds an. Cluetip scheint ein funktionsreiches Tooltip- / Dialog-Plug-In zu sein. Die 4. Demo klingt ähnlich wie das, was Sie versuchen (obwohl ich sehe, dass sie nicht die genaue Positionierungsoption hat, nach der Sie suchen.)
quelle
Alternativ können Sie das Dienstprogramm jQuery UI verwenden,
Position
zquelle
dialog
mögen:$('#dialog').dialog({ width: 300 /* insert your options */ }).dialog('widget').position({ my: 'left', at: 'right', of: $(this) });
at: 'top+50'
stattat: 'top + 50'
$('dialog').dialog({ position: { my: 'left top', at: 'left+50 top+50'}, });
Dank einiger Antworten oben habe ich experimentiert und festgestellt, dass Sie lediglich das Attribut "Position" in der Definition des Modaldialogs bearbeiten müssen:
JQuery hatte keine Probleme mit dem "mittleren" Text für den horizontalen "X" -Wert und mein Dialogfeld wurde in der Mitte angezeigt, 20 Pixel nach unten.
Ich liebe JQuery.
quelle
Nachdem ich alle Antworten gelesen hatte, funktionierte dies schließlich für mich:
quelle
Als ich Jaymins Beispiel noch einen Schritt weiter ging, kam ich auf diese Idee, um ein jQuery-UI-Dialogelement über dem Element zu positionieren, auf das Sie gerade geklickt haben (denken Sie an "Sprechblase"):
Beachten Sie, dass ich das UI-Dialog-Element "öffne", bevor ich die relativen Breiten- und Höhenversätze berechne. Dies liegt daran, dass jQuery OuterWidth () oder OuterHeight () nicht auswerten kann, ohne dass das UI-Dialog-Element physisch auf der Seite angezeigt wird.
Stellen Sie einfach sicher, dass 'modal' in Ihren Dialogoptionen auf false gesetzt ist, und Sie sollten a-OK sein.
quelle
myDialogX
undmyDialogY
http://docs.jquery.com/UI/API/1.8/Dialog
Beispiel für einen festen Dialog in der linken oberen Ecke:
quelle
Überprüfe dein
<!DOCTYPE html>
Ich habe das bemerkt, wenn du das verpasst
<!DOCTYPE html>
der Dialog zentriert im Dokumentinhalt und nicht im Fenster angezeigt wird den oberen Rand Ihrer HTML-Datei , auch wenn Sie die Position angeben: {my: 'center', at: 'center' , von: window}EG: http://jsfiddle.net/npbx4561/ - Kopieren Sie den Inhalt aus dem Ausführungsfenster und entfernen Sie den DocType. Als HTML speichern und ausführen, um das Problem zu sehen.
quelle
Verwenden Sie diesen Code, um die Kontrolle zu verbessern:
quelle
Positioniert einen Dialog direkt unter einem Element. Ich habe die Funktion offset () verwendet, nur weil sie die Position relativ zur oberen linken Ecke des Browsers berechnet, aber die Funktion position () berechnet die Position relativ zum übergeordneten div oder iframe des übergeordneten Elements des Elements.
quelle
anstatt reine jquery zu machen, würde ich tun:
Wenn ich Ihre Frage richtig verstehe, positioniert der Code, den Sie haben, den Dialog so, als hätte die Seite keinen Bildlauf, aber Sie möchten, dass der Bildlauf berücksichtigt wird. Mein Code sollte das tun.
quelle
Diese Seite zeigt, wie Sie Ihren Bildlaufversatz bestimmen. jQuery hat möglicherweise ähnliche Funktionen, aber ich konnte sie nicht finden. Mit der auf der Seite gezeigten Funktion getScrollXY sollten Sie in der Lage sein, die x- und y-Koordinaten von den Ergebnissen von .position () zu subtrahieren.
quelle
etwas spät, aber Sie können dies jetzt tun, indem Sie $ j (Objekt) .offset (). left und .top entsprechend verwenden.
quelle
Ich denke nicht, dass die Sprechblase ganz richtig ist. Ich habe es ein wenig optimiert, damit es funktioniert und das Element direkt unter dem Link geöffnet wird.
quelle
Um die Mittelposition zu fixieren, benutze ich:
quelle
Hier ist der Code .., wie man den jQuery UI-Dialog zum Zentrieren positioniert ......
quelle
quelle
Sie können verwenden
$(this).offset()
, Position ist mit dem Elternteil verbundenquelle
Ich habe alle vorgeschlagenen Lösungen ausprobiert, aber sie funktionieren nicht, da der Dialog nicht Teil des Hauptdokuments ist und eine eigene Ebene hat (aber das ist meine fundierte Vermutung).
$("#dialog").dialog("option", "position", 'top')
$(dialog).dialog("open");
Holen Sie sich dann das x und y des angezeigten Dialogfelds (kein anderer Knoten des Dokuments!)
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]);
Auf diese Weise stammen die Koordinaten aus dem Dialogfeld und nicht aus dem Dokument, und die Position wird entsprechend der Ebene des Dialogfelds geändert.
quelle
Ich habe auf viele Arten versucht, meinen Dialog auf der Seite zu zentrieren, und festgestellt, dass der Code:
$("#dialog").dialog("option", "position", 'top')
Ändern Sie niemals die Dialogposition, wenn diese erstellt wurde.
Stattdessen ändere ich die Auswahlstufe, um den gesamten Dialog zu erhalten.
$("#dialog").parent()
<- Dies ist das übergeordnete Objekt, das die Funktion dialog () im DOM erstellt. Dies liegt daran, dass der Selektor $ ("# dialog") die Attribute oben links nicht anwendet.Um meinen Dialog zu zentrieren , verwende ich das jQuery-Client-Centering-Plugin
$ ("# dialog"). parent (). centerInClient ();
quelle
Die obigen Lösungen sind sehr zutreffend ... aber der UI-Dialog behält die Position nicht bei, nachdem die Fenstergröße geändert wurde. Der folgende Code macht dies
quelle
Sie können die oberste Position stilvoll für die Anzeige in der Mitte festlegen und sehen, dass der Code:
.ui-dialog {oben: 100px! wichtig;}
Dieser Stil sollte das Dialogfeld 100px unten von oben anzeigen.
quelle