JavaScript progression du chargement d'une image
Est-il possible en JS pour obtenir la progression du chargement de l'image, si l'image est en cours de chargement?
Je veux utiliser les nouveaux Progrès de la balise HTML5 pour montrer l'avancement du chargement des images.
Je souhaite qu'il y ait quelque chose comme:
var someImage = new Image()
someImage.onloadprogress = function(e) { progressBar.value = e.loaded / e.total };
someImage.src = "image.jpg";
- déjà regardé ça? blogs.adobe.com/webplatform/2012/01/13/...
- Possible de dupliquer des stackoverflow.com/questions/2515142/...
- Solution Possible: utiliser un générique
...loading
indicateur jusqu'à ce queimg.complete && img.naturalWidth > 0
Vous devez vous connecter pour publier un commentaire.
Avec cela, vous ajoutez 2 nouvelles fonctions sur l'Image (les) objet:
Et ici, vous utilisez la fonction de charge et ajout de l'image dans une div.
Pendant le chargement de l'état, vous pouvez vérifier le pourcentage de progression à l'aide de
img.completedPercentage
.load
fonction de l'objet prototype etimg.load()
est répertorié commeundefined
.Image.prototype.load
à partir de la fin, alors qu'ils ne sont pas dans Chrome et Firefox. La fourche développeurs n'ont pas reconnu mon rapport de bug donc je ne sais pas si elle sera résolue. Si vous n'utilisez pas uBlock, désactiver tous les plugins et voir si cela permet d'isoler la cause.Sebastian de réponse est excellent, le meilleur que j'ai vu à cette question. Il ya, cependant, quelques améliorations possibles. J'utilise son code modifié comme ceci:
Surtout j'ai ajouté un type mime et quelques détails mineurs. Utilisation en tant que Sebastian décrit. Fonctionne bien.
xmlHTTP.onload
parce que les propriétés de l'image commenaturalWidth
etnaturalHeight
ne sont pas encore disponibles. Vous devriez faire un distinctthisImg.onload = function() {if ( callback ) callback();};
à la place.XMLHttpRequest
est que l'en-tête d'Origine n'est pas mis sur la demande, mais il sera, il vous suffit de régler lesrc
attribut sur laImage
objet directement (au moins dans google Chrome)Juste pour ajouter à la les améliorations, j'ai modifié Julian réponse (qui à son tour modifié Sebastian). J'ai déplacé la logique d'une fonction au lieu de modifier le
Image
objet. Cette fonction renvoie unPromise
qui se résout avec l'URL de l'objet, qui ne doit être inséré commesrc
attribut d'unimage
tag.JS:
HTML:
-1
au lieu defalse
si le progrès n'est pas calculable. Qui gardera le paramètre toujours un nombre. Je vais faire la modification.En fait, dans le dernier chrome, vous pouvez l'utiliser.
JS:
HTML:
Voici une petite mise à jour du code de Julian Jensen afin d'être en mesure de dessiner l'image dans un Canvas après il est chargé :
pour xmlhttpreq v2 vérifier, utiliser:
Si vous voulez traiter votre image chargée, que vous devez ajouter une autre fonction, car
commence à traiter l'image comme un fil.
Vous devez ajouter une nouvelle fonction pour le corps de la charge de prototype, comme
Celle de me faire des maux de tête à réaliser 🙂