Como conectar em um evento de redimensionamento da janela do navegador?
Existe uma maneira do jQuery de ouvir eventos de redimensionamento, mas eu preferiria não incluí-lo no meu projeto apenas para esse requisito.
javascript
dom-events
window-resize
Conta morta
fonte
fonte
Respostas:
O jQuery está apenas envolvendo o
resize
evento DOM padrão , por exemplo.O jQuery pode fazer algum trabalho para garantir que o evento de redimensionamento seja acionado de forma consistente em todos os navegadores, mas não tenho certeza se algum dos navegadores difere, mas recomendamos que você teste no Firefox, Safari e IE.
fonte
window.addEventListener('resize', function(){}, true);
window.onresize = () => { /* code */ };
or better:window.addEventListener('resize', () => { /* code */ });
Primeiro, sei que o
addEventListener
método foi mencionado nos comentários acima, mas não vi nenhum código. Como é a abordagem preferida, aqui está:Aqui está uma amostra de trabalho .
fonte
removeEventListener
.Nunca substitua a função window.onresize.
Em vez disso, crie uma função para adicionar um Event Listener ao objeto ou elemento. Isso verifica e encerra os ouvintes não funcionarem, e substitui a função do objeto como último recurso. Este é o método preferido usado em bibliotecas como o jQuery.
object
: o elemento ou objeto da janelatype
: redimensionar, rolar (tipo de evento)callback
: a referência da funçãoEntão use é assim:
ou com uma função anônima:
fonte
attachEvent
não é mais suportado. A maneira preferida para o futuro éaddEventListener
.elem == undefined
. É possível (embora improvável) que "indefinido" seja definido localmente como outra coisa. stackoverflow.com/questions/8175673/…O evento de redimensionamento nunca deve ser usado diretamente, pois é disparado continuamente à medida que redimensionamos.
Use uma função de rejeição para atenuar o excesso de chamadas.
window.addEventListener('resize',debounce(handler, delay, immediate),false);
Aqui está um debounce comum flutuando pela rede, embora procure por outros mais avançados como feitos em lodash.
Isso pode ser usado assim ...
Ele nunca dispara mais de uma vez a cada 200ms.
Para alterações na orientação móvel, use:
Aqui está uma pequena biblioteca que eu montei para cuidar disso ordenadamente.
fonte
(...arguments) => {...}
(ou...args
para menos confusão), pois aarguments
variável não está mais disponível em seu escopo.Solução para 2018+:
Você deve usar ResizeObserver . É uma solução nativa do navegador que tem um desempenho muito melhor do que usar o
resize
evento. Além disso, ele não apenas suporta o evento no,document
mas também no arbitrárioelements
.Atualmente, o Firefox, Chrome e Safari suportam . Para outros navegadores (e mais antigos), é necessário usar um polyfill .
fonte
Acredito que a resposta correta já tenha sido fornecida pelo @Alex V, mas a resposta exige alguma modernização, pois ela tem mais de cinco anos.
Existem dois problemas principais:
Nunca use
object
como um nome de parâmetro. É uma palavra reservered. Com isso dito, a função fornecida do @Alex V não funcionarástrict mode
.A
addEvent
função fornecida pelo @Alex V não retornaevent object
se oaddEventListener
método for usado. Outro parâmetro deve ser adicionado àaddEvent
função para permitir isso.NOTA: O novo parâmetro para
addEvent
foi tornado opcional para que a migração para esta nova versão da função não interrompa nenhuma chamada anterior para esta função. Todos os usos herdados serão suportados.Aqui está a
addEvent
função atualizada com estas alterações:Um exemplo de chamada para a nova
addEvent
função:fonte
Obrigado por consultar a postagem do meu blog em http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html .
Enquanto você pode simplesmente conectar-se ao evento de redimensionamento de janela padrão, verá que, no IE, o evento é disparado uma vez para cada movimento do eixo X e uma vez para cada eixo Y, resultando em uma tonelada de eventos sendo disparados que podem ter um desempenho impacto no seu site se a renderização for uma tarefa intensiva.
Meu método envolve um curto tempo limite que é cancelado em eventos subseqüentes, para que o evento não chegue ao seu código até que o usuário termine de redimensionar a janela.
fonte
fonte
A seguinte postagem no blog pode ser útil para você: Corrigindo o evento de redimensionamento de janela no IE
Ele fornece este código:
fonte
As soluções já mencionadas acima funcionarão se tudo que você quiser fazer é redimensionar a janela e apenas a janela. No entanto, se você deseja que o redimensionamento seja propagado para elementos filho, será necessário propagar o evento você mesmo. Aqui está um exemplo de código para fazer isso:
Observe que um elemento filho pode chamar
no objeto de evento que é passado como o primeiro Arg do evento de redimensionamento. Por exemplo:
fonte
fonte
fonte