É possível detectar, usando JavaScript, quando o usuário altera o zoom em uma página? Eu simplesmente quero pegar um evento "zoom" e responder a ele (semelhante ao evento window.onresize).
Obrigado.
javascript
events
zoom
user123093
fonte
fonte
Respostas:
Não há como detectar ativamente se há um zoom. Encontrei uma boa entrada aqui sobre como você pode tentar implementá-lo.
Você também pode fazer isso usando as ferramentas da postagem acima. O problema é que você está mais ou menos tentando adivinhar se a página foi ou não ampliada. Isso funcionará melhor em alguns navegadores do que em outros.
Não há como saber se a página está com zoom, se eles carregam sua página enquanto estiver com zoom.
fonte
document.body.offsetWidth
Estou usando este pedaço de JavaScript para reagir aos "eventos" do Zoom.
Ele examina a largura da janela. (Como sugerido nesta página (ao qual Ian Elliott se vinculou): http://novemberborn.net/javascript/page-zoom-ff3 [arquivo] )
Testado com Chrome, Firefox 3.6 e Opera, não com o IE.
Atenciosamente, Magnus
fonte
Boas notícias
todosalgumas pessoas! Navegadores mais recentes acionarão um evento de redimensionamento de janela quando o zoom for alterado.fonte
Vamos definir px_ratio como abaixo:
relação do px = relação do pixel físico ao css px.
se houver um zoom na página, os pixels da janela de visualização (o px é diferente do pixel) são reduzidos e devem ser ajustados à tela para que a proporção (pixel físico / CSS_px) seja maior.
mas no redimensionamento da janela, o tamanho da tela também reduz os pixels. então a proporção será mantida.
zoom: aciona o evento windows.resize -> e altera px_ratio
mas
redimensionar: acionar evento windows.resize -> não altera px_ratio
O ponto principal é a diferença entre CSS PX e Physical Pixel.
https://gist.github.com/abilogos/66aba96bb0fb27ab3ed4a13245817d1e
fonte
Isso funciona para mim:
Só é necessário no IE8. Todos os outros navegadores geram naturalmente um evento de redimensionamento.
fonte
Existe um plugin bacana construído a partir dele
yonran
que pode fazer a detecção. Aqui está sua pergunta respondida anteriormente no StackOverflow. Funciona para a maioria dos navegadores. A aplicação é tão simples como esta:Demo
fonte
Always enable zoom
botão na opção Acessibilidade. A demonstração não reagirá à mudança.Gostaria de sugerir uma melhoria para a solução anterior com o rastreamento de alterações na largura da janela. Em vez de manter sua própria matriz de ouvintes de eventos, você pode usar o sistema de eventos javascript existente e acionar seu próprio evento após a alteração da largura e vincular manipuladores de eventos a ele.
A aceleração / rejeição pode ajudar a reduzir a taxa de chamadas de seu manipulador.
fonte
Você também pode obter os eventos de redimensionamento de texto e o fator de zoom injetando uma div contendo pelo menos um espaço que não pode ser quebrado (possivelmente oculto) e verificando regularmente sua altura. Se a altura mudar, o tamanho do texto foi alterado (e você sabe quanto - isso também dispara, aliás, se a janela for ampliada no modo de página inteira e você ainda obterá o fator de zoom correto, com a mesma altura / relação altura).
fonte
fonte
No iOS 10, é possível adicionar um ouvinte de
touchmove
evento ao evento e detectar se a página é ampliada com o evento atual.fonte
Embora essa seja uma pergunta antiga de 9 anos, o problema persiste!
Eu tenho detectado o redimensionamento e excluído o zoom em um projeto. Por isso, editei meu código para fazê-lo funcionar para detectar o redimensionamento e o zoom exclusivos um do outro. Funciona na maioria das vezes, portanto, se a maioria é boa o suficiente para o seu projeto, isso deve ser útil! Ele detecta o zoom 100% do tempo no que testei até agora. O único problema é que, se o usuário ficar louco (ou seja, redimensionar espasticamente a janela) ou se a janela ficar lenta, poderá disparar como um zoom em vez de redimensionar a janela.
Ele funciona detectando uma alteração no redimensionamento de uma janela
window.outerWidth
ouwindow.outerHeight
ao mesmo tempo em que detecta uma alteraçãowindow.innerWidth
ouwindow.innerHeight
um redimensionamento independente da janela como um zoom.Nota: Minha solução é como a do KajMagnus, mas isso funcionou melhor para mim.
fonte
0.05
sem pelo menos fornecer uma boa explicação. ;-) Por exemplo, eu sei que no Chrome, especificamente, 10% é a menor quantidade que o navegador ampliará em qualquer caso, mas não está claro se isso é verdade para outros navegadores. fyi, sempre verifique se seu código foi testado e esteja preparado para defendê-lo ou melhorá-lo.Aqui está uma solução limpa:
fonte
O evento redimensionar funciona em navegadores modernos, anexando o evento
window
e lendo os valores dobody
ou de outro elemento com, por exemplo ( .getBoundingClientRect () ).Outra alternativa : a API ResizeObserver
Dependendo do layout, você pode assistir ao redimensionamento de um elemento específico.
Isso funciona bem em layouts «responsivos», porque a caixa do contêiner é redimensionada ao aplicar zoom.
Cuidado para não sobrecarregar tarefas javascript dos eventos de gestos do usuário. Use requestAnimationFrame sempre que precisar redesenhar.
fonte
De acordo com a MDN, "matchMedia" é a maneira correta de fazer isso https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Monitoring_screen_resolution_or_zoom_level_changes
é um pouco complicado, porque cada instância pode assistir apenas um MQ de cada vez, por isso, se você estiver interessado em qualquer alteração no nível de zoom, precisará fazer vários matchers .. mas como o navegador é responsável por emitir os eventos, provavelmente ainda mais eficiente que a pesquisa, e você pode limitar ou rejeitar o retorno de chamada ou fixá-lo em um quadro de animação ou algo assim - aqui está uma implementação que parece bastante rápida, sinta-se à vontade para trocar de acelerador ou qualquer outra coisa, se você já depende disso.
Execute o trecho de código e aumente e diminua o zoom no seu navegador, observe o valor atualizado na marcação - só testei isso no Firefox! deixe-me saber se você vê algum problema.
fonte
Estou respondendo a um link de 3 anos, mas acho que aqui está uma resposta mais aceitável,
Crie o arquivo .css como,
POR EXEMPLO:-
O código acima torna o tamanho da fonte '10px' quando a tela é ampliada para aproximadamente 125%. Você pode verificar diferentes níveis de zoom alterando o valor de '1000px'.
fonte
max-width
e a taxa de zoom?