2010-04-15 5 views
1

page en question: http://phwsinc.com/our-work/one-rincon-hill.asppréchargement image Bug dans IE6-8

En IE6-8, lorsque vous cliquez sur la vignette la plus à gauche dans la galerie, l'image jamais charge. Si vous cliquez une seconde fois sur la vignette, elle se chargera. J'utilise jQuery, et voici mon code qui est mise sous tension de la galerie:

$(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; 
    }); 
} 
}); 

Un collègue de travail m'a dit qu'il a toujours eu des problèmes avec l'objet Image js(), et m'a conseillé d'ajouter juste un élément <img /> intérieur un ensemble div à display:none;, mais c'est un peu brouillon à mon goût - j'ai aimé utiliser l'objet Image(), il a gardé les choses belles et propres, pas de balisage HTML ajouté inutile.

Toute aide serait appréciée. Il fonctionne toujours sans le préchargement de l'image, donc si tout le reste échoue, je vais juste envelopper le préchargement dans un if !($.browser.msie){ } et l'appeler un jour.

+0

Si je vous, je mettrais le gestionnaire « charge » pour '# photo' séparément, au lieu de le faire sur chaque clic comme cette. – Pointy

+0

Je ne comprends pas très bien - pourriez-vous fournir un échantillon de code? Le gestionnaire de charge n'a-t-il pas besoin de s'exécuter chaque fois que l'on clique sur une vignette (et donc qu'une nouvelle image est en cours de chargement)? Sinon, il ne fonctionnera qu'une fois sur $ (document) .ready(). –

Répondre

2

Je vois que vous avez déjà résolu cela, mais je voulais voir si je pouvais obtenir le préchargement de travailler dans IE.

essayer de le changer

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

à cette

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

Je suis désolé, il m'a fallu si longtemps pour arriver à cela, a été très occupé. Votre approche a fonctionné! Pour la plupart ... le seul problème est, chaque fois et alors qu'il y a une sorte de scintillement bizarre ... mais je ne peux pas le fixer, il est difficile de le reproduire. Eh bien, j'utilise votre nouveau code maintenant en tout cas, merci beaucoup! –