Como chamo uma função depois que a janela do navegador TERMINAR o redimensionamento?
Estou tentando fazer assim, mas estou tendo problemas. Estou usando a função de evento JQuery Resize:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
No entanto, essa função é chamada continuamente se o usuário estiver redimensionando manualmente a janela do navegador. O que significa que ele pode chamar essa função dezenas de vezes em um curto intervalo de tempo.
Como posso chamar a função de redimensionamento apenas uma vez (depois que a janela do navegador terminar de redimensionar)?
ATUALIZAR
Também sem ter que usar uma variável global.
javascript
jquery
html
nickb
fonte
fonte
Respostas:
Aqui está um exemplo usando as instruções do jh
Você pode armazenar um id de referência para qualquer setInterval ou setTimeout. Como isso:
fonte
Debounce .
Observe, você pode usar este método para qualquer coisa que quiser depurar (eventos chave, etc.).
Ajuste o parâmetro de tempo limite para obter o efeito desejado ideal.
fonte
func
, com othis
ponteiro interno apontando parascope
, e comArray.prototype.slice.call(args)
(o que gera uma matriz padrão deargs
) como os argumentosVocê pode usar
setTimeout()
eclearTimeout()
em conjunto comjQuery.data
:Atualizar
Eu escrevi uma extensão para aprimorar o manipulador de eventos padrão
on
(&bind
) do jQuery. Ele anexa uma função de manipulador de eventos para um ou mais eventos aos elementos selecionados se o evento não foi disparado para um determinado intervalo. Isso é útil se você deseja disparar um retorno de chamada somente após um atraso, como o evento de redimensionamento ou então. https://github.com/yckart/jquery.unevent.jsUse-o como qualquer outro gerenciador de evento
on
oubind
, exceto que você pode passar um parâmetro extra como último:http://jsfiddle.net/ARTsinn/EqqHx/
fonte
fonte
Apenas para adicionar ao acima, é comum obter eventos de redimensionamento indesejados por causa das barras de rolagem que aparecem e saem. Aqui estão alguns códigos para evitar isso:
veja jsfiddle
fonte
Underscore.js tem alguns métodos excelentes para essa tarefa:
throttle
edebounce
. Mesmo se você não estiver usando o Underscore, dê uma olhada na fonte dessas funções. Aqui está um exemplo:fonte
Esta é a minha abordagem:
O resize-event-listener captura todas as chamadas de redimensionamento de entrada, cria uma função de tempo limite para cada uma e salva o identificador de tempo limite junto com um número de iteração prefixado por
'id-'
(para ser usado como chave de array) notos
-array.cada vez que o tempo limite é disparado, ele chama a
fn
função -funcional que verifica se esse foi o último tempo limite natos
matriz (a função fn exclui todos os tempos limite executados). se verdadeiro (=if(len-1 == 0)
), o redimensionamento está concluído.fonte
jQuery fornece um
off
método para remover o manipulador de eventosfonte