Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2024

ProgramaçãoLinguagens de programação
Código
fg097563
Banca
FGV
Órgão
TCE-PA
Ano
2024
Nível
Superior
Cargo
Auditor de Controle Externo - Área de Informática - Web Design
Combinar funções e métodos JavaScript é uma opção para criar experiências responsivas em diferentes dispositivos.Nesse contexto, considerando as limitações de processamento de dispositivos móveis, para monitorar mudanças no tamanho da janela, poderíamos
  1. Averificar o tamanho da janela no evento 'DOMContentLoaded'.
  2. Busar o método “window.addEventListener('load')”.
  3. Cusar “window.matchMedia” para criar uma Media Query e adicionar um listener.
  4. Dusar o método “window.resize” juntamente com um listener.
  5. Eusar o método “window.addEventListener('resize')”.
Revelar gabarito e comentário

GabaritoC — usar “window.matchMedia” para criar uma Media Query e adicionar um listener.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

JavaScript: Monitoramento de Redimensionamento da Janela

Gabarito: letra C. A alternativa C utiliza window.matchMedia para criar uma Media Query e adicionar um listener que dispara apenas quando a condição da media query muda – abordagem mais eficiente para dispositivos móveis, pois evita chamadas excessivas de eventos contínuos como o resize. As demais opções são inadequadas: A e B não monitoram mudanças contínuas, D não é um método válido e E, embora funcione, é menos eficiente em termos de performance.

A questão contextualiza a monitoração do tamanho da janela em dispositivos móveis, que possuem recursos limitados. O evento resize (alternativa E) é a forma mais comum, mas ele é disparado continuamente durante o redimensionamento, podendo sobrecarregar o dispositivo. A alternativa C oferece uma solução mais otimizada.

Monitorar redimensionamento (janela)
  • 1Eventos contínuos (ineficientes)
    • resize (dispara a cada pixel)
  • 2Eventos únicos (não monitoram)
    • DOMContentLoaded
    • load
  • 3Solução otimizada
    • matchMedia + listener change
      • Dispara só na mudança da condição
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

O evento DOMContentLoaded é disparado uma única vez, quando o DOM é completamente carregado. Ele não monitora mudanças futuras no tamanho da janela. Serve para inicialização, não para redimensionamento.

Alternativa B — ❌ Incorreta

O evento load também é disparado uma única vez, após o carregamento completo da página (incluindo imagens e scripts). Não reage a redimensionamentos.

Alternativa C — ✅ Correta ⟵ GABARITO

window.matchMedia retorna um objeto MediaQueryList. Ao adicionar um listener com addEventListener('change', handler), a função é chamada apenas quando o resultado da media query muda (ex.: de true para false), e não a cada pixel de redimensionamento. Isso reduz significativamente a carga de processamento, tornando-a ideal para dispositivos móveis. Exemplo:

const mq = window.matchMedia('(min-width: 768px)');
mq.addEventListener('change', function(e) {
  if(e.matches) { /* ... */ }
});

Alternativa D — ❌ Incorreta

window.resize não é um método padrão do JavaScript. O método correto para disparar um redimensionamento programático seria window.resizeTo(width, height), mas ele não serve para monitorar mudanças. Não existe window.resize como função de monitoramento.

Alternativa E — ❌ Incorreta

window.addEventListener('resize', handler) é o método tradicional para monitorar redimensionamento. Funciona, mas dispara o evento em alta frequência durante o redimensionamento, o que pode causar lentidão em dispositivos móveis. Embora seja possível usar técnicas de debounce/throttle, a própria questão destaca a limitação de processamento, tornando a alternativa C mais adequada.

NÃO CAIA NESSA!

Muitos candidatos marcam a alternativa E por ser a mais conhecida, mas a questão pede a melhor prática considerando limitações de dispositivos móveis. A banca espera que você conheça a diferença de desempenho entre o evento resize e o matchMedia. O resize é o "jeito comum", mas não o mais eficiente nesse contexto.

PEGA ESSA DICA!

Para provas de concursos sobre JavaScript para mobile, lembre-se: matchMedia é preferível quando você precisa reagir a mudanças de viewport apenas em breakpoints específicos. Se precisar de monitoramento contínuo, use resize com throttle (como requestAnimationFrame), mas a abordagem com matchMedia é mais leve e direta.

Resumo da comparação:

Método

Disparo

Performance em Mobile

window.addEventListener('resize')

Contínuo durante redimensionamento

Ruim (muitos eventos)

window.matchMedia + listener

Apenas quando a media query muda

Bom (eventos esporádicos)

Gabarito: letra C.

Link permanente: /questoes/fg097563