La réponse sommet des rochers et c'est ce qui a conduit à ma réponse, de sorte que même si vous trouvez ma réponse grande, peut-être plus l'un de l'inspiration?
Je suis tout simplement jeter mes 2cents ici parce que j'ai trouvé beaucoup d'autres réponses que la moitié ont travaillé, mais devrait être évitée. J'ai également reconstruit la réponse sommet, sous forme de Plugin jQuery avec la facilité d'utilisation et un travail de Violon pour montrer combien il est simple!
Tout d'abord, l'une des communes les réponses que j'ai vu ici et dans dup de cette question est le jQuery $(window).focus/blur
méthodes. 2 les problèmes persistent avec cette méthode.
Le premier problème est un problème de "duplicate" appels. C'est assez facile à contourner si vous souhaitez utiliser cette méthode. Il suffit de créer une sorte d'identifiant de vérifier à chaque fois que votre fonction est appelée, puis aller à la ville.
Par Exemple:
$(window).on("blur focus", function(e) {
var prevType = $(this).data("prevType"); // getting identifier to check by
if (prevType != e.type) { // reduce double fire issues by checking identifier
switch (e.type) {
case "blur":
// do work
break;
case "focus":
// do work
break;
}
}
$(this).data("prevType", e.type); // reset identifier
})
Aussi simple que cela semble, il renvoie à un nouveau problème. Pour jQuery, fenêtre.focus moyens lorsque l'utilisateur a fait "choisi" de cette fenêtre. En d'autres termes, si l'utilisateur sélectionne une autre application (comme la calculatrice ou quelque chose) ou même de clics dans le navigateur de la console, la fenêtre perd le focus". Ainsi, cette méthode peut encore être indésirable.
Ainsi, nous sommes de retour à la méthode prévue par le haut de réponse. Super réponse! Il représente pour ces questions en devenant directement déterminées par les événements. C'est ce qui m'a amené à être en mesure de faire un très facile à utiliser le plugin jQuery qui va être beaucoup plus précis que $(window).blur
.
Utilisation:
$.winFocus(function(event, isVisible) {
console.log("Combo\t\t", event, isVisible);
});
// OR *new option*
$.winFocus(function(event, isVisible) {
console.log("Combo\t\t", event, isVisible);
}, false);
// OR
$.winFocus({
blur: function(event) {
console.log("Blur\t\t", event);
},
focus: function(event) {
console.log("Focus\t\t", event);
}
});
// OR
$.winFocus(function(event) {
console.log("Blur\t\t", event);
},
function(event) {
console.log("Focus\t\t", event);
});
Le Plugin a été mis à jour!
A maintenant une option "initRun". C'est par défaut à true et exécuter vous êtes à la fonction de changement lors de l'initialisation. Il suffit d'ajouter un false
booléen à l'appel, comme $.winFocus(func..., false)
prendre un pas en arrière et ne pas avoir de courir jusqu'à la première fois que la fenêtre est centrée ou floue (la plupart des likly floue) après l'appel initial.
Aussi, je crois que j'ai corrigé tous les problèmes de navigateur. Hit me up dans les commentaires si vous trouvez un problème!