Saya mencoba menggunakan pustaka UI dialog jQuery untuk memposisikan dialog di sebelah beberapa teks saat di-hover. Dialog jQuery mengambil parameter posisi yang diukur dari sudut kiri atas viewport saat ini (dengan kata lain, [0, 0]
akan selalu meletakkannya di sudut kiri atas jendela browser Anda, di mana pun Anda saat ini menggulir). Namun, satu-satunya cara yang saya tahu untuk mengambil lokasi adalah elemen relatif terhadap halaman SELURUH.
Berikut ini adalah apa yang saya miliki saat ini. position.top
dihitung menjadi sekitar 1200 atau lebih, yang menempatkan dialog jauh di bawah konten lainnya pada halaman.
$(".mytext").mouseover(function() {
position = $(this).position();
$("#dialog").dialog('option', 'position', [position.top, position.left]);
}
Bagaimana saya bisa menemukan posisi yang benar?
Terima kasih!
Jawaban:
Lihat beberapa plugin jQuery untuk implementasi dialog lainnya. Cluetip tampaknya adalah plug-in gaya tooltip / dialog yang kaya fitur. Demo ke-4 terdengar mirip dengan apa yang Anda coba lakukan (meskipun saya melihat bahwa itu tidak memiliki opsi pemosisian yang tepat yang Anda cari.)
sumber
Sebagai alternatif, Anda bisa menggunakan utilitas jQuery UI
Position
misalnyasumber
dialog
seperti ini:$('#dialog').dialog({ width: 300 /* insert your options */ }).dialog('widget').position({ my: 'left', at: 'right', of: $(this) });
at: 'top+50'
bukannyaat: 'top + 50'
$('dialog').dialog({ position: { my: 'left top', at: 'left+50 top+50'}, });
Berkat beberapa jawaban di atas, saya bereksperimen dan akhirnya menemukan bahwa yang perlu Anda lakukan hanyalah mengedit atribut "posisi" dalam definisi Modal Dialog:
JQuery tidak memiliki masalah dengan teks "tengah" untuk nilai "X" horizontal dan dialog saya muncul di tengah, 20px ke bawah dari atas.
Saya menyukai JQuery.
sumber
Setelah membaca semua balasan, ini akhirnya berhasil untuk saya:
sumber
Mengambil contoh Jaymin selangkah lebih maju, saya menemukan ini untuk memposisikan elemen ui-dialog jQuery di atas elemen yang baru saja Anda klik (pikirkan "gelembung ucapan"):
Perhatikan bahwa saya "membuka" elemen ui-dialog sebelum menghitung offset lebar dan tinggi relatif. Ini karena jQuery tidak dapat mengevaluasi outerWidth () atau outerHeight () tanpa elemen ui-dialog yang secara fisik muncul di halaman.
Pastikan untuk menyetel 'modal' ke false dalam opsi dialog Anda dan Anda seharusnya baik-baik saja.
sumber
myDialogX
danmyDialogY
http://docs.jquery.com/UI/API/1.8/Dialog
Contoh untuk dialog tetap di pojok kiri atas:
sumber
Periksa Anda
<!DOCTYPE html>
Saya perhatikan bahwa jika Anda melewatkan
<!DOCTYPE html>
bagian atas file HTML Anda, dialog ditampilkan di tengah dalam konten dokumen bukan di dalam jendela, meskipun Anda menentukan posisi: {my: 'center', at: 'center' , dari: window}Misalnya: http://jsfiddle.net/npbx4561/ - Salin konten dari jendela run dan hapus DocType. Simpan sebagai HTML dan jalankan untuk melihat masalahnya.
sumber
Untuk meletakkannya tepat di atas kendali, Anda dapat menggunakan kode ini:
sumber
Memposisikan dialog tepat di bawah elemen. Saya menggunakan fungsi offset () hanya karena menghitung posisi relatif terhadap sudut kiri atas browser, tetapi fungsi position () menghitung posisi relatif terhadap div induk atau iframe induk elemen tersebut.
sumber
daripada melakukan jquery murni, saya akan melakukan:
jika saya memahami pertanyaan Anda dengan benar, kode yang Anda miliki adalah memposisikan dialog seolah-olah halaman tidak memiliki gulungan, tetapi Anda ingin agar dialog tersebut mempertimbangkan pengguliran tersebut. kode saya harus melakukan itu.
sumber
Halaman ini menunjukkan bagaimana menentukan offset gulir Anda. jQuery mungkin memiliki fungsi serupa tetapi saya tidak dapat menemukannya. Dengan menggunakan fungsi getScrollXY yang ditampilkan di halaman, Anda harus dapat mengurangi koefisien x dan y dari hasil .position ().
sumber
agak terlambat tetapi Anda dapat melakukan ini sekarang dengan menggunakan $ j (object) .offset (). left dan .top sesuai.
sumber
Menurut saya balon ucapan itu kurang tepat. Saya men-tweaknya sedikit agar berfungsi dan item terbuka tepat di bawah tautan.
sumber
Untuk memperbaiki posisi tengah, saya menggunakan:
sumber
Berikut kodenya .., bagaimana memposisikan dialog jQuery UI ke tengah ......
sumber
sumber
Anda dapat menggunakan
$(this).offset()
, posisi terkait dengan orang tuasumber
Saya sudah mencoba semua solusi yang diusulkan tetapi mereka tidak akan berhasil karena dialog bukan bagian dari dokumen utama dan akan memiliki lapisannya sendiri (tapi itu tebakan saya).
$("#dialog").dialog("option", "position", 'top')
$(dialog).dialog("open");
Kemudian dapatkan x dan y dari dialog yang ditampilkan (bukan node lain dari dokumen!)
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]);
Dengan cara ini koordinat berasal dari dialog bukan dari dokumen dan posisinya diubah sesuai dengan lapisan dialog.
sumber
Saya mencoba banyak cara untuk membuat dialog saya terpusat pada halaman dan melihat bahwa kodenya:
$("#dialog").dialog("option", "position", 'top')
jangan pernah mengubah posisi dialog saat ini dibuat.
Alih-alih, saya mengubah level pemilih untuk mendapatkan seluruh dialog.
$("#dialog").parent()
<- Ini adalah objek induk yang dibuat oleh fungsi dialog () pada DOM, ini karena pemilih $ ("# dialog") tidak menerapkan atribut, top, left.Untuk memusatkan dialog saya, saya menggunakan jQuery-Client-Centering-Plugin
$ ("# dialog"). parent (). centerInClient ();
sumber
solusi di atas sangat benar ... tetapi dialog UI tidak mempertahankan posisi setelah jendela diubah ukurannya. kode di bawah ini melakukan ini
sumber
Anda dapat mengatur posisi teratas dalam gaya untuk tampilan di tengah, lihat bahwa kode:
.ui-dialog {top: 100px! important;}
Gaya ini akan menampilkan kotak dialog 100px di bawah dari atas.
sumber