Estou usando o JQuery como tal:
$(window).resize(function() { ... });
No entanto, parece que, se a pessoa redimensionar manualmente as janelas do navegador, arrastando a borda da janela para aumentá-la / diminuir, o .resize
evento acima será acionado várias vezes.
Pergunta: Como chamo uma função APÓS o redimensionamento da janela do navegador concluído (para que o evento seja acionado apenas uma vez)?
javascript
jquery
sarah
fonte
fonte
Respostas:
Aqui está uma modificação da solução do CMS que pode ser chamada em vários locais no seu código:
Uso:
A solução do CMS é boa se você a chamar apenas uma vez, mas se a chamar várias vezes, por exemplo, se partes diferentes do seu código configurarem retornos de chamada separados para redimensionar janelas, haverá falha porque eles compartilham a
timer
variável.Com essa modificação, você fornece um ID exclusivo para cada retorno de chamada, e esses IDs exclusivos são usados para manter todos os eventos de tempo limite separados.
fonte
Eu prefiro criar um evento:
Aqui está como você o cria:
Você pode ter isso em um arquivo javascript global em algum lugar.
fonte
Eu uso a seguinte função para atrasar ações repetidas, ele funcionará para o seu caso:
Uso:
A função de retorno de chamada transmitida a ele será executada somente quando a última chamada para atrasar for feita após o período especificado, caso contrário, um timer será redefinido. Acho isso útil para outros fins, como detectar quando o usuário parou de digitar etc. ..
fonte
$(window).resize
) forem porque todos eles compartilharão atimer
variável. Veja minha resposta abaixo para a solução proposta.Se você tiver o Underscore.js instalado, poderá:
fonte
Algumas das soluções mencionadas anteriormente não funcionaram para mim, embora sejam de uso mais geral. Como alternativa, eu encontrei este que fez o trabalho no redimensionamento da janela:
fonte
Muito obrigado a David Walsh, aqui está uma versão básica do debounce de sublinhado.
Código:
Uso simples:
Ref: http://davidwalsh.name/javascript-debounce-function
fonte
Na verdade, como eu sei, você não pode executar algumas ações exatamente quando o redimensionamento está desativado, simplesmente porque você não conhece as ações do usuário futuro. Mas você pode assumir o tempo decorrido entre dois eventos de redimensionamento; portanto, se você esperar um pouco mais que esse tempo e nenhum redimensionamento for feito, poderá chamar sua função.
A idéia é que usamos
setTimeout
e seu ID para salvá-lo ou excluí-lo. Por exemplo, sabemos que o tempo entre dois eventos de redimensionamento é de 500 ms; portanto, esperaremos 750 ms.fonte
Declarar ouvinte com atraso global:
E abaixo, use os ouvintes para o
resized
evento como desejar:fonte
Funciona para mim. Veja esta solução - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
fonte
Plugin jQuery simples para evento de redimensionamento de janela atrasado.
SINTAXE:
Adicionar nova função para redimensionar evento
Remova a função (declarando seu ID) adicionada anteriormente
Remova todas as funções
USO:
SAÍDA DE USO:
PLUGAR:
fonte
Supondo que o cursor do mouse retorne ao documento após o redimensionamento da janela, podemos criar um comportamento de retorno de chamada com o evento onmouseover. Não esqueça que esta solução pode não funcionar em telas ativadas para toque conforme o esperado.
fonte
Isto é o que eu implementei:
$ (window) .resize (function () {setTimeout (someFunction, 500);});
podemos limpar o setTimeout se esperamos que o redimensionamento ocorra menos que
500ms
Boa sorte...
fonte