J'utilise JQuery en tant que tel:
$(window).resize(function() { ... });
Cependant, il semble que si la personne redimensionne manuellement les fenêtres de son navigateur en faisant glisser le bord de la fenêtre pour l'agrandir / la réduire, l' .resize
événement ci-dessus se déclenche plusieurs fois.
Question: Comment appeler une fonction APRÈS le redimensionnement de la fenêtre du navigateur terminé (pour que l'événement ne se déclenche qu'une seule fois)?
javascript
jquery
Sarah
la source
la source
Réponses:
Voici une modification de la solution de CMS qui peut être appelée à plusieurs endroits de votre code:
Usage:
La solution de CMS est parfaite si vous ne l'appelez qu'une seule fois, mais si vous l'appelez plusieurs fois, par exemple si différentes parties de votre code configurent des rappels séparés pour le redimensionnement de la fenêtre, alors il échouera car ils partagent la
timer
variable.Avec cette modification, vous fournissez un identifiant unique pour chaque rappel, et ces identifiants uniques sont utilisés pour garder tous les événements d'expiration séparés.
la source
Je préfère créer un événement:
Voici comment vous le créez:
Vous pourriez avoir ceci dans un fichier javascript global quelque part.
la source
J'utilise la fonction suivante pour retarder les actions répétées, cela fonctionnera pour votre cas:
Usage:
La fonction de rappel qui lui a été transmise ne s'exécutera que lorsque le dernier appel à retarder aura été effectué après la durée spécifiée, sinon une minuterie sera réinitialisée, je trouve cela utile à d'autres fins comme la détection du moment où l'utilisateur a arrêté de taper, etc. ..
la source
$(window).resize
) car elles partageront toutes latimer
variable. Voir ma réponse ci-dessous pour la solution proposée.Si Underscore.js est installé, vous pouvez:
la source
Certaines des solutions mentionnées précédemment n'ont pas fonctionné pour moi, même si elles sont d'une utilisation plus générale. Alternativement, j'ai trouvé celui-ci qui a fait le travail sur le redimensionnement de la fenêtre:
la source
Un grand merci à David Walsh, voici une version vanille de debounce de soulignement.
Code:
Utilisation simple:
Réf: http://davidwalsh.name/javascript-debounce-function
la source
En fait, comme je le sais, vous ne pouvez pas faire certaines actions exactement lorsque le redimensionnement est désactivé, simplement parce que vous ne connaissez pas les actions des futurs utilisateurs. Mais vous pouvez supposer le temps écoulé entre deux événements de redimensionnement, donc si vous attendez un peu plus que ce temps et qu'aucun redimensionnement n'est effectué, vous pouvez appeler votre fonction.
L'idée est que nous utilisons
setTimeout
et son identifiant afin de l'enregistrer ou de le supprimer. Par exemple, nous savons que le temps entre deux événements de redimensionnement est de 500 ms, nous attendrons donc 750 ms.la source
Déclarez l'auditeur globalement retardé:
Et ci-dessous, utilisez des écouteurs pour l'
resized
événement comme vous le souhaitez:la source
Ça marche pour moi. Voir cette solution - https://alvarotrigo.com/blog/firing-resize-event-only-once-when-resizing-is-finished/
la source
Plugin jQuery simple pour un événement de redimensionnement de fenêtre différé.
SYNTAXE:
Ajouter une nouvelle fonction pour redimensionner l'événement
Supprimez la fonction (en déclarant son ID) ajoutée précédemment
Supprimer toutes les fonctions
USAGE:
SORTIE D'UTILISATION:
BRANCHER:
la source
En supposant que le curseur de la souris revienne au document après le redimensionnement de la fenêtre, nous pouvons créer un comportement de rappel avec l'événement onmouseover. N'oubliez pas que cette solution peut ne pas fonctionner comme prévu pour les écrans tactiles.
la source
Voici ce que j'ai implémenté:
$ (fenêtre) .resize (function () {setTimeout (someFunction, 500);});
nous pouvons effacer le setTimeout si nous nous attendons à ce que le redimensionnement se produise moins de
500ms
Bonne chance...
la source