FUNGSI MONITOR TUNGGAL / DUAL (kredit ke http://www.xtf.dk - terima kasih!)
UPDATE: Ini juga akan berfungsi pada windows yang tidak diimbangi dengan lebar dan tinggi layar sekarang berkat @Frost!
Jika Anda menggunakan monitor ganda, jendela akan terpusat secara horizontal, tetapi tidak secara vertikal ... gunakan fungsi ini untuk menjelaskan hal itu.
const popupCenter = ({url, title, w, h}) => {
// Fixes dual-screen position Most browsers Firefox
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
const systemZoom = width / window.screen.availWidth;
const left = (width - w) / 2 / systemZoom + dualScreenLeft
const top = (height - h) / 2 / systemZoom + dualScreenTop
const newWindow = window.open(url, title,
`
scrollbars=yes,
width=${w / systemZoom},
height=${h / systemZoom},
top=${top},
left=${left}
`
)
if (window.focus) newWindow.focus();
}
Contoh Penggunaan:
popupCenter({url: 'http://www.xtf.dk', title: 'xtf', w: 900, h: 500});
KREDIT PERLU KE: http://www.xtf.dk/2011/08/center-new-popup-window-even-on.html (saya hanya ingin menautkan ke halaman ini tapi kalau-kalau situs web ini menurun kode di sini di SO, tepuk tangan!)
coba seperti ini:
sumber
Karena kerumitan menentukan pusat layar saat ini dalam pengaturan multi-monitor, opsi yang lebih mudah adalah dengan memusatkan jendela sembul di atas jendela induk. Cukup lewati jendela induk sebagai parameter lain:
Penerapan:
sumber
Sumber: http://www.nigraphic.com/blog/java-script/how-open-new-window-popup-center-screen
sumber
Jika Anda ingin memusatkannya pada frame Anda saat ini, saya akan merekomendasikan fungsi ini:
Mirip dengan jawaban Crazy Tim, tetapi tidak menggunakan window.top. Dengan cara ini, ini akan berfungsi bahkan jika jendela disematkan dalam iframe dari domain yang berbeda.
sumber
Ini bekerja sangat baik di Firefox.
Ubah saja variabel teratas ke nama lain dan coba lagi
sumber
Number(...)
.Rekomendasi saya adalah menggunakan lokasi teratas 33% atau 25% dari ruang yang tersisa,
dan bukan 50% sebagai contoh lain yang diposting di sini,
terutama karena tajuk jendela ,
yang terlihat lebih baik dan lebih nyaman bagi pengguna,
kode lengkap:
lihat baris ini:
var top = (screen.height - h) / 4; // untuk 25% - bagi dengan 4 | untuk 33% - bagi dengan 3
sumber
Facebook menggunakan algoritma berikut untuk memposisikan jendela popup login mereka:
sumber
Anda dapat menggunakan css untuk melakukannya, cukup berikan properti berikut ke elemen yang akan ditempatkan di tengah popup
sumber
Ini adalah versi alternatif dari solusi yang disebutkan di atas ...
sumber
Versi saya dengan JavaScript ES6.
Bekerja dengan baik di Chrome dan Chromium dengan pengaturan layar ganda.
Contoh
sumber
(ini diposting pada tahun 2020)
Ekstensi untuk jawaban CrazyTim
Anda juga dapat mengatur lebar ke persentase (atau rasio) untuk ukuran dinamis. Ukuran absolut masih diterima.
pemakaian:
sumber
Catatan: Anda harus menggunakan
Math.round
untuk mendapatkan bilangan bulat lebar dan tinggi yang tepat.sumber
Berdasarkan Facebook tetapi menggunakan kueri media daripada regex agen pengguna untuk menghitung jika ada cukup ruang (dengan beberapa ruang) untuk popup, jika tidak layar penuh. Tetap muncul popup di ponsel sebagai tab baru.
sumber
Solusi hybrid ini bekerja untuk saya, baik pada pengaturan layar tunggal maupun ganda
sumber
Saya punya masalah dengan memusatkan jendela popup di monitor eksternal dan window.screenX dan window.screenY masing-masing adalah nilai negatif (-1920, -1200). Saya telah mencoba semua solusi yang disarankan di atas dan mereka bekerja dengan baik di monitor utama. Saya ingin pergi
Inilah yang bekerja untuk saya:
sumber
sumber