>  기사  >  웹 프론트엔드  >  js Images_javascript 스킬 로딩 시 404 문제 해결

js Images_javascript 스킬 로딩 시 404 문제 해결

WBOY
WBOY원래의
2016-05-16 15:33:471421검색

오랜 기간 웹사이트를 운영하다 보면 필연적으로 이미지 404가 나타나는 경우가 있는데, 그 이유는 해당 이미지 파일이 존재하지 않거나 현재 존재하지 않기 때문일 수 있습니다. 일반적인 해결 방법은 404 이미지를 숨기거나 기본 이미지로 바꾸는 것입니다.
img 태그 이벤트 속성
img 태그에 사용할 수 있는 시간 속성은 다음과 같습니다.
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
img 태그에서 흔히 사용되는 이벤트는 다음과 같습니다.

onerror: 이미지 로딩 중 오류가 발생할 때 트리거됩니다.
onabort: 이미지가 로드될 때 사용자가 로드를 중지하기 위해 클릭하면 일반적으로 "이미지 로드 중"이라는 메시지가 표시됩니다.
onload: 이미지가 로드될 때 트리거됩니다.
1. 이미지 오류 이벤트 모니터링

<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"); 
} 

참고: 이미지 로딩 오류가 발생할 때 처리 기능을 읽지 못하는 것을 방지하려면 헤드에 처리 기능을 정의해야 합니다
2. jQuery를 사용하여 오류 모니터링

// 通常不会再HTML里面内联js,可以使用.error对图片进行监听处理 
$('#test img').error(function() { 
 $(this).hide(); 
 // $(this).attr("src", "images/demo.png"); 
}); 

참고: jQuery 로딩은 img 이전에 이루어져야 하며 처리 기능은 img 이후에 이루어져야 합니다
3. 함수 처리를 이용하세요

// 原生JS解决方案 
function $id(id) { 
 return !id || id.nodeType === 1 &#63; 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') &#63; 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') &#63; '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&#63; 
 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; 
} 

위의 기능은 다양한 용도로 사용됩니다.
1. 이미지 정보 가져오기: 이미지 다운로드 가능 여부, 이미지 너비 및 높이

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. 사진 다운로드 및 삽입

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); 

위 내용은 이미지를 로드할 때 발생하는 404 문제에 대한 js 솔루션입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.