Próbuję użyć interfejsu użytkownika okna dialogowego jQuery biblioteki w celu umieszczenia okna dialogowego obok tekstu po najechaniu kursorem. Okno dialogowe jQuery przyjmuje parametr pozycji, który jest mierzony od lewego górnego rogu bieżącej rzutni (innymi słowy, [0, 0]
zawsze umieszcza go w lewym górnym rogu okna przeglądarki, niezależnie od tego, gdzie jesteś aktualnie przewijany). Jednak jedynym sposobem, w jaki znam, aby pobrać lokalizację, jest element powiązany z CAŁĄ stroną.
Oto, co mam obecnie. position.top
oblicza się na około 1200, co umieszcza okno dialogowe znacznie poniżej pozostałej zawartości strony.
$(".mytext").mouseover(function() {
position = $(this).position();
$("#dialog").dialog('option', 'position', [position.top, position.left]);
}
Jak mogę znaleźć właściwą pozycję?
Dzięki!
Odpowiedzi:
Sprawdź niektóre wtyczki jQuery dla innych implementacji okna dialogowego. Cluetip wydaje się być bogatą w funkcje wtyczką w stylu podpowiedzi / okien dialogowych. Czwarte demo brzmi podobnie do tego, co próbujesz zrobić (chociaż widzę, że nie ma precyzyjnej opcji pozycjonowania, której szukasz).
źródło
Alternatywnie możesz użyć narzędzia jQuery UI
Position
, npźródło
dialog
takiego jak:$('#dialog').dialog({ width: 300 /* insert your options */ }).dialog('widget').position({ my: 'left', at: 'right', of: $(this) });
at: 'top+50'
zamiastat: 'top + 50'
$('dialog').dialog({ position: { my: 'left top', at: 'left+50 top+50'}, });
Dzięki niektórym powyższym odpowiedziom eksperymentowałem i ostatecznie stwierdziłem, że wszystko, co musisz zrobić, to edytować atrybut „pozycja” w definicji okna dialogowego modalnego:
JQuery nie miał problemów z tekstem „środkowym” dla poziomej wartości „X”, a moje okno dialogowe pojawiło się pośrodku, 20 pikseli w dół od góry.
Serce JQuery.
źródło
Po przeczytaniu wszystkich odpowiedzi, to w końcu zadziałało:
źródło
Idąc krok dalej z przykładem Jaymina, wymyśliłem to, aby umieścić element jQuery ui-dialog nad elementem, który właśnie kliknąłeś (pomyśl „dymek”):
Zauważ, że „otwieram” element ui-dialog przed obliczeniem względnych przesunięć szerokości i wysokości. Dzieje się tak dlatego, że jQuery nie może ocenić externalWidth () ani externalHeight () bez fizycznego pojawienia się elementu ui-dialog na stronie.
Po prostu upewnij się, że w opcjach dialogowych ustawiłeś „modalne” na false i powinieneś być OK.
źródło
myDialogX
imyDialogY
http://docs.jquery.com/UI/API/1.8/Dialog
Przykład stałego okna dialogowego w lewym górnym rogu:
źródło
Sprawdź swój
<!DOCTYPE html>
Zauważyłem, że jeśli przegapisz
<!DOCTYPE html>
od początku pliku HTML, okno dialogowe jest wyświetlane pośrodku treści dokumentu, a nie w oknie, nawet jeśli określisz pozycję: {my: 'center', at: 'center' , z: okno}Np . : http://jsfiddle.net/npbx4561/ - Skopiuj zawartość z okna uruchamiania i usuń DocType. Zapisz jako HTML i uruchom, aby zobaczyć problem.
źródło
Aby uzyskać pełną kontrolę, możesz użyć tego kodu:
źródło
Umieszcza okno dialogowe tuż pod elementem. Użyłem funkcji offset () tylko dlatego, że oblicza ona pozycję względem lewego górnego rogu przeglądarki, ale funkcja position () oblicza pozycję względem nadrzędnego elementu div lub iframe tego rodzica elementu.
źródło
zamiast robić jquery, zrobiłbym:
jeśli dobrze rozumiem twoje pytanie, kod, który masz, ustawia okno dialogowe tak, jakby strona nie miała przewijania, ale chcesz, aby uwzględniało przewijanie. mój kod powinien to zrobić.
źródło
Ta strona pokazuje, jak określić przesunięcie przewijania. jQuery może mieć podobną funkcjonalność, ale nie mogłem go znaleźć. Używając funkcji getScrollXY pokazanej na stronie, powinieneś być w stanie odjąć współrzędne x i y od wyników .position ().
źródło
trochę za późno, ale możesz to zrobić teraz, używając odpowiednio $ j (obiekt) .offset (). left i .top.
źródło
Nie sądzę, żeby bańka mowy była całkiem poprawna. Poprawiłem go trochę, aby działał, a element otwiera się tuż pod linkiem.
źródło
Aby naprawić pozycję środkową, używam:
źródło
Oto kod ..., jak ustawić okno dialogowe jQuery UI na środku ......
źródło
źródło
możesz użyć
$(this).offset()
, pozycja jest związana z rodzicemźródło
Wypróbowałem wszystkie proponowane rozwiązania, ale nie zadziałają, ponieważ okno dialogowe nie jest częścią głównego dokumentu i będzie miało własną warstwę (ale to moje wyuczone przypuszczenie).
$("#dialog").dialog("option", "position", 'top')
$(dialog).dialog("open");
Następnie pobierz x i y wyświetlonego okna dialogowego (nie innego węzła dokumentu!)
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]);
W ten sposób współrzędne pochodzą z okna dialogowego, a nie z dokumentu, a pozycja jest zmieniana zgodnie z warstwą okna.
źródło
Próbowałem na wiele sposobów, aby moje okno dialogowe było wyśrodkowane na stronie i zobaczyłem, że kod:
$("#dialog").dialog("option", "position", 'top')
nigdy nie zmieniaj pozycji okna dialogowego, kiedy zostało utworzone.
Zamiast tego zmieniam poziom selektora, aby uzyskać całe okno dialogowe.
$("#dialog").parent()
<- To jest obiekt nadrzędny, który funkcja dialog () tworzy w DOM, dzieje się tak, ponieważ selektor $ ("# dialog") nie stosuje atrybutów, góra, lewo.Aby wyśrodkować okno dialogowe, używam wtyczki jQuery-Client-Centering-Plugin
$ ("# dialog"). parent (). centerInClient ();
źródło
powyższe rozwiązania są bardzo prawdziwe ... ale okno dialogowe interfejsu użytkownika nie zachowuje pozycji po zmianie rozmiaru okna. poniższy kod to robi
źródło
Możesz ustawić najwyższą pozycję w stylu do wyświetlania na środku, zobaczyłeś, że kod:
.ui-dialog {góra: 100px! ważne;}
Ten styl powinien pokazywać okno dialogowe 100 pikseli poniżej od góry.
źródło