Atualmente, uso algo como:
$(window).resize(function(){resizedw();});
Mas isso é chamado muitas vezes enquanto o processo de redimensionamento continua. É possível capturar um evento quando ele termina?
javascript
jquery
html
resize
jquery-events
Rella
fonte
fonte
.one()
para que ele só seja executado depois que todo o redimensionamento for feito e não repetidamente?Respostas:
Tive sorte com a seguinte recomendação: http://forum.jquery.com/topic/the-resizeend-event
Aqui está o código para que você não precise procurar no link e na fonte do post:
Obrigado sime.vidas pelo código!
fonte
new Date(-1E12)
- isto é, JSLint adverte sobre o uso00
.rtime: Date; .... if (+new Date() - +rtime < delta)
e na função de redimensionar texto datilografado deve ser uma função de seta como estaresizeend=()=>
. Como na função redimensionar,this
faça referência ao objeto da janela.Você pode usar
setTimeout()
eclearTimeout()
Exemplo de código no jsfiddle .
fonte
$(document)
, de detecção do rato seria limitada a usuários que executam o Microsoft Windows e versões vulneráveis do seu Internet Explorer: iedataleak.spider.io/demoEste é o código que eu escrevo de acordo com a resposta de @Mark Coleman:
Obrigado Mark!
fonte
resizeTimer
é uma variável global, o que significa que não é definidawindow
, portanto é exatamente a mesma que aqui, apenas este exemplo é melhor, pois você não precisa definir a variável externamente. e também faz sentido adicionar essa variável aowindow
objeto, pois esse é o objeto ao qual o ouvinte de evento está vinculado.O Internet Explorer fornece um evento resizeEnd . Outros navegadores acionarão o evento de redimensionamento várias vezes enquanto você estiver redimensionando.
Existem outras ótimas respostas aqui que mostram como usar setTimeout e o .throttle ,.debounce métodos de lodash e sublinhado, então vou mencionar o plugin jQuery do acelerador-debounce de Ben Alman, que realiza o que você procura .
Suponha que você tenha esta função que deseja acionar após um redimensionamento:
Exemplo de aceleração
No exemplo a seguir,
onResize()
será chamado apenas uma vez a cada 250 milissegundos durante o redimensionamento da janela.Exemplo de rejeição
No exemplo a seguir,
onResize()
será chamado apenas uma vez no final de uma ação de redimensionamento de janela. Isso alcança o mesmo resultado que o @Mark apresenta em sua resposta.fonte
Existe uma solução elegante usando o Underscore.js. Portanto, se você a estiver usando no seu projeto, você pode fazer o seguinte:
Isso deve ser suficiente :) Mas, se você estiver interessado em ler mais sobre isso, você pode conferir minha postagem no blog -
http://rifatnabi.com/post/detect-end-of-jquery-resize-event-using-underscore -debounce(deadlink)fonte
lodash
também forneça issoUma solução é estender o jQuery com uma função, por exemplo:
resized
Uso da amostra:
$(window).resized(myHandler, 300);
fonte
Você pode armazenar um ID de referência em qualquer setInterval ou setTimeout. Como isso:
Para fazer isso sem uma variável "global", você pode adicionar uma variável local à própria função. Ex:
fonte
Você pode usar
setTimeout()
eclearTimeout()
em conjunto comjQuery.data
:Atualizar
Eu escrevi uma extensão para aprimorar o manipulador padrão
on
(&bind
) -event 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 acionado por um determinado intervalo. Isso é útil se você deseja acionar 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 manipulador
on
oubind
-event, exceto que você pode passar um parâmetro extra como último:http://jsfiddle.net/ARTsinn/EqqHx/
fonte
Existe um método muito mais simples de executar uma função no final do redimensionamento do que calcular o tempo delta entre duas chamadas, basta fazer o seguinte:
E o equivalente para Angular2 :
Para o método angular, use a
() => { }
notação emsetTimeout
para preservar o escopo; caso contrário, você não poderá fazer nenhuma chamada ou função de funçãothis
.fonte
Esta é uma modificação do código de Dolan acima. Adicionei um recurso que verifica o tamanho da janela no início do redimensionamento e o compara ao tamanho no final do redimensionamento, se o tamanho for maior ou menor que a margem ( por exemplo, 1000) e depois recarrega.
fonte
A resposta de Mark Coleman é certamente muito melhor que a resposta selecionada, mas se você deseja evitar a variável global para o ID de tempo limite (a
doit
variável na resposta de Mark), você pode fazer um dos seguintes:(1) Use uma expressão de função chamada imediatamente (IIFE) para criar um fechamento.
(2) Use uma propriedade da função de manipulador de eventos.
fonte
eu escrevi uma função wrapper litte sozinho ...
Aqui está o uso:
fonte
fonte
Bem, no que diz respeito ao gerenciador de janelas, cada evento de redimensionamento é sua própria mensagem, com um começo e um fim distintos; portanto, tecnicamente, toda vez que a janela é redimensionada, é o fim.
Dito isto, talvez você queira atrasar sua continuação? Aqui está um exemplo.
fonte
Aqui está um script MUITO simples para acionar os eventos 'redimensionar' e 'redimensionar' no objeto da janela.
Não há necessidade de mexer com datas e horários.
A
d
variável representa o número de milissegundos entre os eventos de redimensionamento antes de disparar o evento final de redimensionamento. Você pode brincar com isso para alterar a sensibilidade do evento final.Para ouvir esses eventos, tudo o que você precisa fazer é:
resizestart:
$(window).on('resizestart', function(event){console.log('Resize Start!');});
redimensionar:
$(window).on('resizeend', function(event){console.log('Resize End!');});
fonte
Isto é o que eu uso para atrasar ações repetidas. Ele pode ser chamado em vários locais no seu código:
Uso:
fonte
já que a resposta selecionada não funcionou .. e se você não estiver usando o jquery, aqui está uma função simples do acelerador, com um exemplo de como usá-lo com redimensionamento de janelas
fonte
isso funcionou para mim, pois eu não queria usar nenhum plug-in.
Na redimensionamento da janela, chame "setFn", que obtém a largura da janela e salve como "originalWindowSize". Em seguida, chame "checkFn", que após 500 ms (ou sua preferência) obtém o tamanho atual da janela e compara o original com o atual, se não forem iguais, a janela ainda será redimensionada. Não se esqueça de remover as mensagens do console em produção e (opcional) pode tornar o "setFn" auto-executado.
fonte
Isso funcionou para o que eu estava tentando fazer no chrome. Isso não acionará o retorno de chamada até 200 ms após o último evento de redimensionamento.
fonte
ATUALIZAR!
Melhor alternativa também criada por mim está aqui: https://stackoverflow.com/a/23692008/2829600 (suporta "excluir funções")
POSTO ORIGINAL:
Eu escrevi essa função simples para lidar com atraso na execução, útil dentro de jQuery .scroll () e .resize ().
fonte
$(window).resize(function() { delay_exec('test1', 30, function() { ... delayed stuff here ... }); });
:? Código bastante limpo caso contrário. Obrigado por compartilhar. :)Eventos ResizeStart e ResizeEnd para janela
http://jsfiddle.net/04fLy8t4/
Eu implementei a função que dispara dois eventos no elemento DOM do usuário:
Código:
fonte
fonte
Não sei se meu código funciona para outros, mas é realmente um ótimo trabalho para mim. Tive essa ideia analisando o código Dolan Antenucci, porque a versão dele não funciona para mim e eu realmente espero que seja útil para alguém.
fonte
Eu escrevi uma função que passa uma função quando envolvida em qualquer evento de redimensionamento. Ele usa um intervalo para que o redimensionamento não crie constantemente eventos de tempo limite. Isso permite que ele execute independentemente do evento de redimensionamento, exceto uma entrada de log que deve ser removida na produção.
https://github.com/UniWrighte/resizeOnEnd/blob/master/resizeOnEnd.js
}
fonte