FUNÇÃO DE MONITOR ÚNICO / DUAL (crédito para http://www.xtf.dk - obrigado!)
ATUALIZAÇÃO: Também funcionará em janelas que não estão no limite da largura e altura da tela agora, graças ao @Frost!
Se você estiver no monitor duplo, a janela será centralizada horizontalmente, mas não verticalmente ... use essa função para explicar isso.
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();
}
Exemplo de uso:
popupCenter({url: 'http://www.xtf.dk', title: 'xtf', w: 900, h: 500});
O CRÉDITO VAI A: http://www.xtf.dk/2011/08/center-new-popup-window-even-on.html (eu queria apenas criar um link para esta página, mas no caso de este site cair no código está aqui no SO, felicidades!)
tente assim:
fonte
Devido à complexidade de determinar o centro da tela atual em uma configuração de vários monitores, uma opção mais fácil é centralizar o pop-up na janela principal. Basta passar a janela pai como outro parâmetro:
Implementação:
fonte
Fonte: http://www.nigraphic.com/blog/java-script/how-open-new-window-popup-center-screen
fonte
Se você deseja centralizá-lo no quadro em que está atualmente, eu recomendaria esta função:
Semelhante à resposta de Crazy Tim, mas não usa window.top. Dessa forma, funcionará mesmo se a janela estiver incorporada em um iframe de um domínio diferente.
fonte
Funciona muito bem no Firefox.
Apenas altere a variável top para qualquer outro nome e tente novamente
fonte
Number(...)
.Minha recomendação é usar a localização superior 33% ou 25% do espaço restante
e não 50% como outros exemplos publicados aqui,
principalmente por causa do cabeçalho da janela ,
que parece melhor e mais conforto para o usuário,
código completo:
confira esta linha:
var top = (screen.height - h) / 4; // para 25% - dividido por 4 | para 33% - dividido por 3
fonte
O Facebook usa o seguinte algoritmo para posicionar sua janela pop-up de login:
fonte
Você pode usar css para fazer isso, apenas dê as seguintes propriedades ao elemento a ser colocado no centro do pop-up
fonte
Aqui está uma versão alternativa da solução mencionada acima ...
fonte
Minha versão com JavaScript ES6.
Funciona bem no Chrome e no Chromium com configuração de tela dupla.
Exemplo
fonte
(publicado em 2020)
Uma extensão da resposta do CrazyTim
Você também pode definir a largura como uma porcentagem (ou uma proporção) para um tamanho dinâmico. Tamanho absoluto ainda é aceito.
uso:
fonte
Nota: você deve usar
Math.round
para obter o número exato exato de largura e altura.fonte
Baseado no Facebook, mas usa uma consulta de mídia em vez do regex do agente do usuário para calcular se há espaço suficiente (com algum espaço) para o pop-up, caso contrário, fica em tela cheia. Os pop-ups de Tbh no celular são abertos como novas guias de qualquer maneira.
fonte
Essa solução híbrida funcionou para mim, na configuração de tela única e dupla
fonte
Eu tive um problema ao centralizar uma janela pop-up no monitor externo e window.screenX e window.screenY eram valores negativos (-1920, -1200), respectivamente. Eu tentei todas as soluções acima sugeridas e elas funcionaram bem em monitores primários. Eu queria sair
Aqui está o que funcionou para mim:
fonte
fonte