FUNCIÓN DE MONITOR ÚNICO / DUAL (crédito a http://www.xtf.dk - ¡gracias!)
ACTUALIZACIÓN: ¡También funcionará en ventanas que no están maximizadas al ancho y la altura de la pantalla ahora gracias a @Frost!
Si tiene un monitor dual, la ventana se centrará horizontalmente, pero no verticalmente ... use esta función para dar cuenta de eso.
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();
}
Ejemplo de uso:
popupCenter({url: 'http://www.xtf.dk', title: 'xtf', w: 900, h: 500});
EL CRÉDITO VA A: http://www.xtf.dk/2011/08/center-new-popup-window-even-on.html (solo quería vincular a esta página, pero en caso de que este sitio web caiga el código está aquí en SO, ¡salud!)
pruébalo así:
fuente
Debido a la complejidad de determinar el centro de la pantalla actual en una configuración de varios monitores, una opción más fácil es centrar la ventana emergente sobre la ventana principal. Simplemente pase la ventana principal como otro parámetro:
Implementación:
fuente
Fuente: http://www.nigraphic.com/blog/java-script/how-open-new-window-popup-center-screen
fuente
Si desea centrarlo en el marco en el que se encuentra actualmente, recomendaría esta función:
Similar a la respuesta de Crazy Tim, pero no usa window.top. De esta manera, funcionará incluso si la ventana está incrustada en un iframe de un dominio diferente.
fuente
Funciona muy bien en Firefox.
Simplemente cambie la variable superior a cualquier otro nombre e intente nuevamente
fuente
Number(...)
.Mi recomendación es usar la ubicación superior 33% o 25% del espacio restante,
y no 50% como otros ejemplos publicados aquí,
principalmente debido al encabezado de la ventana ,
que se ve mejor y más cómodo para el usuario,
código completo:
mira esta línea:
var top = (screen.height - h) / 4; // para 25% - dividido por 4 | por 33% - dividido por 3
fuente
Facebook utiliza el siguiente algoritmo para colocar su ventana emergente de inicio de sesión:
fuente
Puede usar css para hacerlo, solo asigne las siguientes propiedades al elemento que se colocará en el centro de la ventana emergente
fuente
Aquí hay una versión alternativa de la solución antes mencionada ...
fuente
Mi versión con ES6 JavaScript.
Funciona bien en Chrome y Chromium con configuración de pantalla dual.
Ejemplo
fuente
(esto fue publicado en 2020)
Una extensión a la respuesta de CrazyTim
También puede establecer el ancho en un porcentaje (o una relación) para un tamaño dinámico. El tamaño absoluto aún se acepta.
uso:
fuente
Nota: debe usar
Math.round
para obtener el número entero exacto de ancho y alto.fuente
Basado en Facebook pero usa una consulta de medios en lugar de la expresión regular del agente de usuario para calcular si hay suficiente espacio (con algo de espacio) para la ventana emergente, de lo contrario pasa a pantalla completa. Las ventanas emergentes de Tbh en el móvil se abren como nuevas pestañas de todos modos
fuente
Esta solución híbrida funcionó para mí, tanto en configuración de pantalla única como dual
fuente
Tuve un problema al centrar una ventana emergente en el monitor externo y window.screenX y window.screenY eran valores negativos (-1920, -1200) respectivamente. He intentado todo lo anterior de las soluciones sugeridas y funcionaron bien en monitores primarios. Me quería ir
Esto es lo que funcionó para mí:
fuente
fuente