2012-11-25 5 views
2

현재 jQuery를 사용하여 이미지를로드하고 완전히로드 된 후에 페이드 인합니다. 그러나 이제로드하려는 이미지가 이미 브라우저 캐시에 있는지를 감지하려고합니다. 그런 다음 3 초 후에 표시가 사라질 경우입니다.JavaScript가 이미지 캐시에 있는지 확인합니다.

아무도 내가 이것을 할 수있는 방법을 알고 있습니까?

+2

, 그냥 볼 것이다. 왜 아무것도 바꿀 필요가 있니? – Xymostech

+0

이미지가 캐싱되지 않았 음을 시뮬레이션하려고합니까? – David

+0

브라우저 캐시는 투명합니다. 모든 이미지 및 기타 웹 자원은 js에 의해 읽기/쓰기가 불가능한 브라우저 설정에 따라 캐시를 통해 제공됩니다. 따라서 이미지가 캐시에 새로로드되었는지 또는 이전 요청에 대한 응답으로로드되었는지를 확인할 수있는 확실한 방법이 없습니다. 당신이 할 수있는 최선의 방법은 url에 고유 한 쿼리 문자열을 추가하여 이미지가 소스에서 새로 고쳐지도록하는 것입니다. 이는 브라우저와 호스트 사이의 임의의 수의 웹 캐시가 쿼리 문자열을 무시하고 "변경되지 않음"으로 응답하도록 선택할 수 있으므로 어떤 경우에는 신뢰할 수 없습니다. –

답변

3

캐시에 무엇이 있는지 미리 알려주는 브라우저 기능이 없습니다.

캐시를 원한다면 다음에 사용할 때 캐시 될 가능성이 높지만 이미 캐시 된 것인지 알 수있는 방법이 없습니다.

이미지를로드 한 다음 즉시 로딩할지 여부를 결정할 수 있습니다. 이미지가 1 초 미만 (캐시에서 발생할 가능성이 높음) 이상로드 될 경우 다른 동작 과정을 취합니다. 회로망). 이것은 잠시 동안 onload 핸들러와 setTimeout()을 설정하고 어느 것이 든 먼저 일어나는 것에 중점을 둔다.

언제나 우리가 해결하고자하는 문제점을 설명하면 아마 더 나은 조언을 줄 수 있습니다.

만약 당신이하고 싶은게 있다면 (이것은 질문을 읽는 것으로부터의 추측이다) 3 초 (캐싱 된 경우) 또는로드 될 때마다 (캐싱되지 않은 경우) 이미지를 페이드 아웃하는 것입니다.

근무 데모 : http://jsfiddle.net/jfriend00/XqJpT/

function now() { 
    return (new Date()).getTime(); 
} 

function fadeMe(img, always) { 
    var self = $(img); 
    if (!self.data("faded") && (always || (now() - self.data("baseTime") >= 3000))) { 
     self.fadeIn(); 
     self.data("faded", true); 
    } 
} 

var img = $('<img class="initiallyHidden">') 
    .data({ 
     baseTime: now(), 
     faded: false, 
     loaded: false 
    }) 
    .appendTo(document.body) 
    .load(function() { 
     $(this).data("loaded", true); 
     fadeMe(this, false); 
    }) 
    .attr("src", "http://photos.smugmug.com/photos/344291068_HdnTo-S.jpg"); 

setTimeout(function() { 
    if (img.data("loaded")) { 
     fadeMe(img, true); 
    } 
}, 3000); 

관련 문제