J'utilise donc actuellement quelque chose comme:
$(window).resize(function(){resizedw();});
Mais cela est appelé plusieurs fois pendant le processus de redimensionnement. Est-il possible d'attraper un événement lorsqu'il se termine?
J'utilise donc actuellement quelque chose comme:
$(window).resize(function(){resizedw();});
Mais cela est appelé plusieurs fois pendant le processus de redimensionnement. Est-il possible d'attraper un événement lorsqu'il se termine?
.one()
sorte qu'il ne s'exécute qu'après tout redimensionnement et non pas encore et encore?Réponses:
J'ai eu de la chance avec la recommandation suivante: http://forum.jquery.com/topic/the-resizeend-event
Voici le code pour que vous n'ayez pas à fouiller le lien et la source de son article:
Merci sime.vidas pour le code!
la source
new Date(-1E12)
- c'est-à-dire que JSLint met en garde contre l'utilisation00
.rtime: Date; .... if (+new Date() - +rtime < delta)
et dans la fonction de redimensionnement tapuscrit devrait être une fonction flèche comme celle-ciresizeend=()=>
. Parce que dans la fonction resizeend,this
référence à l'objet window.Vous pouvez utiliser
setTimeout()
etclearTimeout()
Exemple de code sur jsfiddle .
la source
$(document)
, la détection de la souris serait limitée aux utilisateurs exécutant Microsoft Windows et les versions vulnérables de son Internet Explorer: iedataleak.spider.io/demoVoici le code que j'écris selon la réponse de @Mark Coleman:
Merci Mark!
la source
resizeTimer
est une variable globale, ce qui signifie qu'elle est définie nonwindow
, donc c'est exactement la même chose qu'ici, seul cet exemple est meilleur car vous n'avez pas besoin de définir la variable en externe. et il est également judicieux d'ajouter cette variable à l'window
objet, car c'est l'objet auquel l'écouteur d'événements est lié.Internet Explorer fournit un événement resizeEnd . D'autres navigateurs déclencheront l'événement de redimensionnement plusieurs fois pendant le redimensionnement.
Il y a d'autres bonnes réponses ici qui montrent comment utiliser setTimeout et le .throttle ,Méthodes .debounce de lodash et underscore, donc je mentionnerai le plugin jQuery de throttle-debounce de Ben Alman qui accomplit ce que vous recherchez.
Supposons que vous ayez cette fonction que vous souhaitez déclencher après un redimensionnement:
Exemple de limitation
Dans l'exemple suivant,
onResize()
ne sera appelé qu'une fois toutes les 250 millisecondes pendant le redimensionnement d'une fenêtre.Exemple de debounce
Dans l'exemple suivant,
onResize()
ne sera appelé qu'une fois à la fin d'une action de redimensionnement de fenêtre. Cela permet d'obtenir le même résultat que @Mark présente dans sa réponse.la source
Il existe une solution élégante utilisant Underscore.js Donc, si vous l'utilisez dans votre projet, vous pouvez faire ce qui suit -
Cela devrait suffire :) Mais, si vous êtes intéressé à en savoir plus à ce sujet, vous pouvez consulter mon article de blog -
http://rifatnabi.com/post/detect-end-of-jquery-resize-event-using-underscore -debounce(lien mort)la source
lodash
Une solution consiste à étendre jQuery avec une fonction, par exemple:
resized
Exemple d'utilisation:
$(window).resized(myHandler, 300);
la source
Vous pouvez stocker un identifiant de référence dans n'importe quel setInterval ou setTimeout. Comme ça:
Pour ce faire sans variable "globale", vous pouvez ajouter une variable locale à la fonction elle-même. Ex:
la source
Vous pouvez utiliser
setTimeout()
etclearTimeout()
conjointement avecjQuery.data
:Mettre à jour
J'ai écrit une extension pour améliorer le gestionnaire par défaut
on
(&bind
) -event 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 resize, 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
Il existe une méthode beaucoup plus simple pour exécuter une fonction à la fin du redimensionnement que de calculer le temps delta entre deux appels, faites-le simplement comme ceci:
Et l'équivalent pour Angular2 :
Pour la méthode angulaire, utilisez la
() => { }
notation dans lesetTimeout
pour conserver la portée, sinon vous ne pourrez pas effectuer d'appels de fonction ou utiliserthis
.la source
Ceci est une modification du code de Dolan ci-dessus, j'ai ajouté une fonctionnalité qui vérifie la taille de la fenêtre au début du redimensionnement et la compare à la taille à la fin du redimensionnement, si la taille est plus grande ou plus petite que la marge ( par exemple 1000) puis il se recharge.
la source
La réponse de Mark Coleman est certainement bien meilleure que la réponse sélectionnée, mais si vous voulez éviter la variable globale pour l'ID de délai d'attente (le
doit
variable dans la réponse de Mark), vous pouvez effectuer l'une des actions suivantes:(1) Utilisez une expression de fonction immédiatement invoquée (IIFE) pour créer une fermeture.
(2) Utilisez une propriété de la fonction de gestionnaire d'événements.
la source
j'ai écrit une fonction wrapper litte sur mon propre ...
Voici l'utilisation:
la source
la source
Eh bien, pour autant que le gestionnaire de fenêtres est concerné, chaque événement resize est son propre message, avec un début et à la fin distincte, donc techniquement, chaque fois que la fenêtre est redimensionnée, elle est la fin.
Cela dit, vous souhaitez peut-être retarder votre poursuite? Voici un exemple.
la source
Voici un script TRÈS simple pour déclencher à la fois un événement «resizestart» et «resizeend» sur l'objet window.
Il n'est pas nécessaire de fouiner avec les dates et les heures.
La
d
variable représente le nombre de millisecondes entre les événements de redimensionnement avant de déclencher l'événement de fin de redimensionnement, vous pouvez jouer avec cela pour modifier la sensibilité de l'événement de fin.Pour écouter ces événements, il vous suffit de:
redémarrer:
$(window).on('resizestart', function(event){console.log('Resize Start!');});
redimensionner:
$(window).on('resizeend', function(event){console.log('Resize End!');});
la source
Voici ce que j'utilise pour retarder les actions répétées, il peut être appelé à plusieurs endroits dans votre code:
Usage:
la source
puisque la réponse sélectionnée n'a pas vraiment fonctionné .. et si vous n'utilisez pas jquery, voici une fonction de limitation simple avec un exemple de la façon de l'utiliser avec le redimensionnement de la fenêtre
la source
cela a fonctionné pour moi car je ne voulais pas utiliser de plugins.
Sur la fenêtre, redimensionnez invoquer "setFn" qui obtient la largeur de la fenêtre et enregistrez-le sous "originalWindowSize". Ensuite, appelez "checkFn" qui après 500 ms (ou votre préférence) obtient la taille de la fenêtre actuelle, et compare l'original au courant, si elles ne sont pas les mêmes, alors la fenêtre est toujours redimensionnée. N'oubliez pas de supprimer les messages de la console en production et (facultatif) peut rendre "setFn" auto-exécutable.
la source
Cela a fonctionné pour ce que j'essayais de faire en chrome. Cela ne déclenchera le rappel que 200 ms après le dernier événement de redimensionnement.
la source
METTRE À JOUR!
Une meilleure alternative également créée par moi est ici: https://stackoverflow.com/a/23692008/2829600 (prend en charge les "fonctions de suppression")
POSTE ORIGINAL:
J'ai écrit cette fonction simple pour gérer le retard d'exécution, utile dans jQuery .scroll () et .resize () Donc callback_f ne fonctionnera qu'une seule fois pour une chaîne d'ID spécifique.
la source
$(window).resize(function() { delay_exec('test1', 30, function() { ... delayed stuff here ... }); });
:? Code assez propre sinon. Merci d'avoir partagé. :)Événements ResizeStart et ResizeEnd pour la fenêtre
http://jsfiddle.net/04fLy8t4/
J'ai implémenté une fonction qui déclenche deux événements sur l'élément DOM utilisateur:
Code:
la source
la source
Je ne sais pas si mon code fonctionne pour d'autres, mais c'est vraiment un excellent travail pour moi. J'ai eu cette idée en analysant le code Dolan Antenucci parce que sa version ne fonctionne pas pour moi et j'espère vraiment qu'elle sera utile à quelqu'un.
la source
J'ai écrit une fonction qui transmet une fonction lorsqu'elle est enveloppée dans un événement de redimensionnement. Il utilise un intervalle pour que le redimensionnement ne crée même pas constamment des événements d'expiration. Cela lui permet de fonctionner indépendamment de l'événement de redimensionnement autre qu'une entrée de journal qui doit être supprimée en production.
https://github.com/UniWrighte/resizeOnEnd/blob/master/resizeOnEnd.js
}
la source