Maison > Article > interface Web > Résoudre le problème de 404 lors du chargement des compétences js images_javascript
Après avoir exploité un site Web pendant une longue période, il est inévitable que l'image 404 apparaisse. La raison peut être que le fichier image n'existe pas ou n'existe pas actuellement. Une solution courante consiste à masquer l'image 404 ou à la remplacer par l'image par défaut .
attribut d'événement de balise img
Les attributs de temps qui peuvent être utilisés dans les balises img sont :
onabort, onbeforeunload, onblur, onchange, onclick, oncontextmenu, ondblclick, ondrag, ondragend, ondragenter, ondragleave, ondragover, ondragstart, ondrop, onerror, onfocus, onkeydown, onkeypress, onkeyup, onload, onmessage, onmousedown, onmousemove, onmouseover, onmouseout, onmouseup, onmousewheel, onresize, onscroll, onselect, onsubmit, onunload
Les événements couramment utilisés de la balise img sont les suivants :
onerror : Déclenché lorsqu'une erreur se produit lors du chargement de l'image.
onabort : Lors du chargement de l'image, elle est déclenchée lorsque l'utilisateur clique pour arrêter le chargement. Elle déclenche généralement une invite ici : "L'image est en cours de chargement".
onload : Déclenché lorsque l'image est chargée.
1. Surveiller les événements d'erreur pour les images
<img src="someimage.png" onerror="imgError(this);" /> // 原生JS: function imgError(image){ // 隐藏图片 image.style.display = 'none'; // 替换为默认图片 // document.getElementById("img").setAttribute("src", "images/demo.png"); } // 使用jQuery处理: function imgError(image){ $(image).hide(); // $(this).attr("src", "images/demo.png"); }
Remarque : La fonction de traitement doit être définie dans la tête pour éviter que la fonction de traitement ne soit pas lue lorsqu'une erreur de chargement d'image se produit
2. Utilisez jQuery pour surveiller les erreurs
// 通常不会再HTML里面内联js,可以使用.error对图片进行监听处理 $('#test img').error(function() { $(this).hide(); // $(this).attr("src", "images/demo.png"); });
Remarque : Le chargement de jQuery doit être avant img et la fonction de traitement doit être après img
3. Utiliser le traitement des fonctions
// 原生JS解决方案 function $id(id) { return !id || id.nodeType === 1 ? id : document.getElementById(id); } function isType(o, t) { return (typeof o).indexOf(t.charAt(0).toLowerCase()) === 0; } // 主要逻辑 function image(src, cfg) { var img, prop, target; cfg = cfg || (isType(src, 'o') ? src : {}); img = $id(src); if (img) { src = cfg.src || img.src; } else { img = document.createElement('img'); src = src || cfg.src; } if (!src) { return null; } prop = isType(img.naturalWidth,'u') ? 'width' : 'naturalWidth'; img.alt = cfg.alt || img.alt; // Add the image and insert if requested (must be on DOM to load or // pull from cache) img.src = src; target = $id(cfg.target); if (target) { target.insertBefore(img, $id(cfg.insertBefore) || null); } // Loaded? if (img.complete) { if (img[prop]) { if (isType(cfg.success,'f')) { cfg.success.call(img); } } else { if (isType(cfg.failure,'f')) { cfg.failure.call(img); } } } else { if (isType(cfg.success,'f')) { img.onload = cfg.success; } if (isType(cfg.failure,'f')) { img.onerror = cfg.failure; } } return img; }
Les fonctions ci-dessus ont de nombreuses utilisations :
1. Obtenez des informations sur l'image : si l'image peut être téléchargée, la largeur et la hauteur de l'image
image('img',{ success : function () { alert(this.width + "-" + this.height); }, failure : function () { alert('image 404!'); }, }); // 验证资源是否下载 image('images/banner/banner_2.jpg', { success : function () {console.log('sucess')}, failure : function () {console.log('failure')}, target : 'myContainerId', insertBefore : 'someChildOfmyContainerId' });
2. Téléchargez et insérez des photos
var report = $id('report'), callback = { success : function () { report.innerHTML += '<p>Success - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; }, failure : function () { report.innerHTML += '<p>Failure - ' + this.src + ' ('+this.offsetWidth+'x'+this.offsetHeight+')</p>'; }, target : 'target' }; image('img', callback); image('images/banner/banner_2.jpg', callback);
Ce qui précède est la solution js au problème 404 lors du chargement des images. J'espère que vous pourrez gagner quelque chose.