Comment appeler une fonction une fois que la fenêtre du navigateur a terminé le redimensionnement?
J'essaye de le faire comme ça, mais j'ai des problèmes. J'utilise la fonction d'événement JQuery Resize:
$(window).resize(function() {
... // how to call only once the browser has FINISHED resizing?
});
Cependant, cette fonction est appelée en permanence si l'utilisateur redimensionne manuellement la fenêtre du navigateur. Ce qui signifie qu'il peut appeler cette fonction des dizaines de fois dans un court intervalle de temps.
Comment puis-je appeler la fonction de redimensionnement une seule fois (une fois que la fenêtre du navigateur a terminé le redimensionnement)?
METTRE À JOUR
Aussi sans avoir à utiliser une variable globale.
javascript
jquery
html
nickb
la source
la source
Réponses:
Voici un exemple utilisant les instructions de thejh
Vous pouvez stocker un identifiant de référence dans n'importe quel setInterval ou setTimeout. Comme ça:
la source
Rebondissez .
Notez que vous pouvez utiliser cette méthode pour tout ce que vous souhaitez supprimer (événements clés, etc.).
Ajustez le paramètre de délai pour un effet optimal souhaité.
la source
func
, avec lethis
pointeur interne pointant versscope
, et avecArray.prototype.slice.call(args)
(qui génère un tableau standard à partir deargs
) comme argumentsVous pouvez utiliser
setTimeout()
etclearTimeout()
en conjonction avecjQuery.data
:Mettre à jour
J'ai écrit une extension pour améliorer le gestionnaire par défaut
on
(&bind
) -event-handler de jQuery. Il attache une fonction de gestionnaire d'événements pour un ou plusieurs événements aux éléments sélectionnés si l'événement n'a pas été déclenché pendant un intervalle donné. Ceci est utile si vous souhaitez déclencher un rappel uniquement après un délai, comme l'événement de redimensionnement, ou autre. https://github.com/yckart/jquery.unevent.jsUtilisez-le comme n'importe quel autre gestionnaire
on
oubind
-event, sauf que vous pouvez passer un paramètre supplémentaire en dernier:http://jsfiddle.net/ARTsinn/EqqHx/
la source
la source
Juste pour ajouter à ce qui précède, il est courant d'obtenir des événements de redimensionnement indésirables en raison des barres de défilement qui apparaissent et sortent, voici un code pour éviter cela:
voir jsfiddle
la source
Underscore.js a quelques bonnes méthodes pour cette tâche:
throttle
etdebounce
. Même si vous n'utilisez pas Underscore, jetez un œil à la source de ces fonctions. Voici un exemple:la source
Voici ma démarche:
Le resize-event-listener attrape tous les appels de redimensionnement entrants, crée une fonction de temporisation pour chacun et enregistre l'identificateur de délai avec un numéro itératif précédé de
'id-'
(pour être utilisable comme clé de tableau) dans letos
-array.à chaque fois, le timeout se déclenche, il appelle la fonction
fn
-fonction, qui vérifie si c'était le dernier timeout dutos
tableau (la fonction fn supprime chaque timeout exécuté). si vrai (=if(len-1 == 0)
), le redimensionnement est terminé.la source
jQuery fournit une
off
méthode pour supprimer le gestionnaire d'événementsla source