J'utilise JavaScript avec la bibliothèque jQuery pour manipuler les vignettes d'images contenues dans une liste non ordonnée. Lorsque l'image est chargée, elle fait une chose, lorsqu'une erreur se produit, elle fait autre chose. J'utilise jQuery load()
et les error()
méthodes comme événements. Après ces événements, je vérifie l'élément DOM image pour le .complete pour m'assurer que l'image n'était pas déjà chargée avant que jQuery puisse enregistrer les événements.
Cela fonctionne correctement sauf lorsqu'une erreur se produit avant que jQuery puisse enregistrer les événements. La seule solution à laquelle je peux penser est d'utiliser l'imgonerror
attribut pour stocker un "indicateur" quelque part dans le monde (ou sur le nœud c'est lui-même) qui dit qu'il a échoué afin que jQuery puisse vérifier que "stocker / nœud" lors de la vérification de .complete.
Quelqu'un a une meilleure solution?
Edit: Points principaux en gras et détails supplémentaires ajoutés ci-dessous: Je vérifie si une image est complète (alias chargée) APRÈS avoir ajouté un événement de chargement et d'erreur sur l'image. De cette façon, si l'image a été chargée avant l'enregistrement des événements, je le saurai encore. Si l'image n'est pas chargée après les événements, les événements s'en occuperont le cas échéant. Le problème est que je peux facilement vérifier si une image est déjà chargée, mais je ne peux pas dire si une erreur s'est produite à la place.
la source
Réponses:
Une autre option consiste à déclencher les événements
onload
et / ouonerror
en créant un élément d'image en mémoire et en définissant sonsrc
attribut sur l'src
attribut d'origine de l'image d'origine. Voici un exemple de ce que je veux dire:J'espère que cela t'aides!
la source
.attr
ligne après les lignes.load
et.error
. Sinon, vous risquez que l'image se charge (ou rencontre une erreur) avant que ces rappels ne soient ajoutés, et ils ne seront pas appelés..load()
et.error()
sont déroutantes et maintenant obsolètes, utilisez.on()
et utilisez les événements commeload
eterror
.Vérifiez les propriétés
complete
etnaturalWidth
, dans cet ordre.https://stereochro.me/ideas/detecting-broken-images-js
la source
Sur la base de ma compréhension de la spécification HTML W3C pour l'
img
élément , vous devriez pouvoir le faire en utilisant une combinaison des attributscomplete
etnaturalHeight
, comme ceci:De la spécification de l'
complete
attribut:Donc, essentiellement,
complete
renvoie true si l'image a terminé le chargement ou n'a pas pu se charger. Puisque nous voulons uniquement le cas où l'image a été chargée avec succès, nous devons également vérifier l'nauturalHeight
attribut:Et
available
est défini comme suit:Donc, si l'image est "cassée" (échec du chargement), alors elle sera à l'état cassé, pas à l'état disponible, donc
naturalHeight
sera donc à 0.Par conséquent, la vérification
imgElement.complete && imgElement.naturalHeight !== 0
doit nous indiquer si l'image a été chargée avec succès.Vous pouvez en savoir plus à ce sujet dans la spécification HTML W3C pour l'
img
élément , ou sur MDN .la source
J'ai essayé de nombreuses façons différentes et c'est la seule qui a fonctionné pour moi
Vous pouvez également ajouter une fonction de rappel déclenchée une fois que toutes les images sont chargées dans le DOM et prêtes. Cela s'applique également aux images ajoutées dynamiquement. http://jsfiddle.net/kalmarsh80/nrAPk/
la source
Utiliser la
imagesLoaded
bibliothèque javascript .Utilisable avec du Javascript simple et en tant que plugin jQuery.
Fonctionnalités:
Ressources
la source
complete
propriété ne semble pas être clairement supportée: impossible de trouver une source fiable d'informations concernant le support du navigateur.complete
La propriété ne semble pas non plus avoir de spécification claire: la spécification HTML5 est la seule à le mentionner et elle est toujours dans une version préliminaire au moment de l'écriture. Si vous utiliseznaturalWidth
etnaturalHeight
ne supportez que IE9 +, donc si vous l'utilisez pour savoir si l'image est chargée, vous avez besoin d'une astuce "intelligente" pour la faire fonctionner sur les anciens navigateurs, et vous devez vérifier que le comportement entre les navigateurs est cohérentRécupérez les informations des éléments de l'image sur la page
Test de travail sur Chrome et Firefox
Travail jsFiddle (ouvrez votre console pour voir le résultat)
Remarque: j'ai utilisé jQuery , je pensais que cela pouvait être obtenu en javascript complet
Je trouve de bonnes informations ici OpenClassRoom -> c'est un forum français
la source
Détecteur de réseau en temps réel - vérifiez l'état du réseau sans rafraîchir la page: (ce n'est pas jquery, mais testé, et fonctionne à 100%: (testé sur Firefox v25.0))
Code:
si la connexion est perdue, appuyez simplement sur le bouton Again.
Mise à jour 1: détection automatique sans rafraîchissement de la page:
la source
Après avoir lu les solutions intéressantes sur cette page, j'ai créé une solution facile à utiliser très influencée par la publication de SLaks et Noyo qui semble fonctionner sur des versions assez récentes (au moment de l'écriture) de Chrome, IE, Firefox, Safari et Opera (tout sous Windows). En outre, cela a fonctionné sur un émulateur iPhone / iPad que j'ai utilisé.
Une différence majeure entre cette solution et la publication de SLaks et Noyo est que cette solution vérifie principalement les propriétés naturalWidth et naturalHeight. J'ai trouvé que dans les versions actuelles du navigateur, ces deux propriétés semblent fournir les résultats les plus utiles et les plus cohérents.
Ce code renvoie VRAI lorsqu'une image a été entièrement chargée ET avec succès. Il renvoie FAUX lorsqu'une image n'a pas encore été entièrement chargée OU n'a pas pu se charger.
Une chose que vous devez savoir est que cette fonction retournera également FALSE si l'image est une image de 0x0 pixel. Mais ces images sont assez rares, et je ne peux pas penser à un cas très utile où vous voudriez vérifier si une image 0x0 pixel a encore été chargée :)
Nous attachons d'abord une nouvelle fonction appelée "isLoaded" au prototype HTMLImageElement, afin que la fonction puisse être utilisée sur n'importe quel élément d'image.
Ensuite, chaque fois que nous devons vérifier l'état de chargement de l'image, nous appelons simplement la fonction "isLoaded".
Selon le commentaire de Giorgian sur la publication de SLaks et Noyo, cette solution ne peut probablement être utilisée comme vérification unique sur Safari Mobile que si vous prévoyez de changer l'attribut SRC. Mais vous pouvez contourner cela en créant un élément d'image avec un nouvel attribut SRC au lieu de modifier l'attribut SRC sur un élément d'image existant.
la source
Voici comment je l'ai fait fonctionner avec plusieurs navigateurs en utilisant une combinaison des méthodes ci-dessus (j'avais également besoin d'insérer des images dynamiquement dans le dom):
Remarque: Vous devrez fournir un état booléen valide pour la variable isIE.
la source
// Ou en tant que plugin
la source
Si je comprends bien, la propriété .complete n'est pas standard. Ce n'est peut-être pas universel ... Je remarque qu'il semble fonctionner différemment dans Firefox vers IE. Je charge un certain nombre d'images en javascript puis vérifie si elles sont terminées. Dans Firefox, cela semble très bien fonctionner. Dans IE, ce n'est pas le cas car les images semblent se charger sur un autre thread. Cela ne fonctionne que si je mets un délai entre mon affectation à image.src et lorsque je vérifie la propriété image.complete.
L'utilisation de image.onload et image.onerror ne fonctionne pas non plus pour moi, car je dois passer un paramètre pour savoir de quelle image je parle lorsque la fonction est appelée. Toute façon de faire cela semble échouer car elle semble en fait passer la même fonction, pas différentes instances de la même fonction. Donc la valeur que je lui passe pour identifier l'image finit toujours par être la dernière valeur de la boucle. Je ne peux penser à aucun moyen de contourner ce problème.
Sur Safari et Chrome, je vois l'image.complete vraie et la largeur naturelle définie même lorsque la console d'erreur affiche un 404 pour cette image ... et j'ai intentionnellement supprimé cette image pour tester cela. Mais ce qui précède fonctionne bien pour Firefox et IE.
la source
Cet extrait de code m'a aidé à résoudre les problèmes de mise en cache du navigateur:
Lorsque le cache du navigateur est désactivé, seul ce code ne fonctionne pas:
pour le faire fonctionner, vous devez ajouter:
la source
En utilisant ce
JavaScript
code, vous pouvez vérifier que l'image est correctement chargée ou non.Essayez ceci
la source
J'ai eu beaucoup de problèmes avec la charge complète d'une image et l'EventListener.
Quoi que j'aie essayé, les résultats n'étaient pas fiables.
Mais j'ai trouvé la solution. Ce n'est techniquement pas agréable, mais maintenant je n'ai jamais eu de chargement d'image défaillant.
Ce que j'ai fait:
Au lieu de charger l'image une fois, je la charge juste une deuxième fois directement après la première fois et les deux s'exécutent via le gestionnaire d'événements.
Tous mes maux de tête ont disparu!
Au fait: les gars de stackoverflow m'ont déjà aidé plus de cent fois. Pour cela un très grand merci!
la source
Celui-ci a bien fonctionné pour moi :)
la source