2010-04-15 1 views
1

페이지에 이미지 버그를 미리로드 : IE6-8에서 http://phwsinc.com/our-work/one-rincon-hill.asp질문에 IE6-8

, 당신은 결코로드 갤러리에서 이미지를 가장 왼쪽의 썸네일을 클릭하면. 섬네일을 두 번 클릭하면로드됩니다. 내가 jQuery를 사용하고, 여기에 갤러리를 전원의 내 코드는 다음과 같습니다

동료는 그가 항상 JS 이미지() 객체에 문제가 있고, 단지의 내부 <img /> 요소를 추가 할 충고 있다고 나에게 말했다
$(document).ready(function() { 
// PROJECT PHOTO GALLERY 
var thumbs = $('.thumbs li a'); 
var photoWrapper = $('div.photoWrapper'); 

if (thumbs.length) { 
    thumbs.click(function(){ 
     photoWrapper.addClass('loading'); 

     var img_src = $(this).attr('href'); 

     // The two lines below are what cause the bug in IE. They make the gallery run much faster in other browsers, though. 
     var new_img = new Image(); 
     new_img.src = img_src; 

     var photo =  $('#photo'); 
     photo.fadeOut('slow', function() { 
      photo.attr('src', img_src); 
      photo.load(function() { 
       photoWrapper.removeClass('loading'); 
       photo.fadeIn('slow'); 
      }); 
     }); 

     return false; 
    }); 
} 
}); 

div가 display:none;으로 설정되었지만 내 취향에 다소 지저분합니다. Image() 객체를 사용하는 것이 좋았습니다. 물건을 멋지게 정리하고 불필요하게 HTML 마크 업을 추가하지 않았습니다.

도움을 주시면 감사하겠습니다. 이미지 미리로드가 없어도 여전히 작동하므로 다른 모든 것이 실패 할 경우 사전로드를 if !($.browser.msie){ }에 랩하고 하루 만 부릅니다.

+0

photo.fadeOut('slow', function() { photo.attr('src', img_src); photo.load(function() { photoWrapper.removeClass('loading'); photo.fadeIn('slow'); }); }); 

내가 당신이라면 내가 대신 각처럼 클릭에 그 일에, 별도로 #의 photo''에 대해 "로드"핸들러를 설정합니다 그. – Pointy

+0

코드 샘플을 제공 할 수 있습니까? 섬네일을 클릭 할 때마다로드 핸들러가 실행될 필요가 없으므로 새 이미지가로드되고 있습니까? 그렇지 않으면 $ (document) .ready()에서만 1 번만 실행됩니다. –

답변

2

이 문제는 이미 해결되었지만 IE에서 작동하도록 사전로드가 가능한지 알고 싶었습니다.

시도 변경이

photo.fadeOut('slow', function() { 
    photo.attr('src', img_src); 

    if (photo[0].complete){ 
    photoWrapper.removeClass('loading'); 
    photo.fadeIn('slow'); 
    } else { 
    photo.load(function() { 
     photoWrapper.removeClass('loading'); 
     photo.fadeIn('slow'); 
    }); 
    } 
}); 
+0

이 일에 너무 오래 걸려서 미안하다. 꽤 바빴다. 접근 방법이 효과적이었습니다! 대부분의 경우 ... 유일한 문제는 매번 어떤 이상한 플리커가있는 동안이지만, 그것을 고정시킬 수는 없기 때문에 복제하기가 어렵습니다. 오, 음, 어쨌든 새로운 코드를 사용하고 있습니다. 감사합니다. –