2009-10-16 9 views
1

je présente une animation simple en utilisant img.src et remplacer l'étiquette <canvas>. À l'heure actuelle, il est seulement prévu de travailler dans FireFox (FF 3.5.3, Mac OS X 10.5.5), donc la compatibilité entre navigateurs n'est pas (encore) un problème.recharge par décalage FF donne des résultats inattendus

Lorsque la page est d'abord chargé ou chargé dans une nouvelle fenêtre ou onglet, tout semble fonctionner comme prévu, et le comportement du cache sur un rechargement simple ne semble pas être un problème; Cependant, si j'essaye de forcer un rechargement avec shift-reload, j'ai un problème. Même si les images ont été préchargées, les images préchargées pour l'animation ne semblent pas être disponibles pour le navigateur qui essaie alors de charger chaque nouvelle img.src à partir du serveur.

Suis-je à la recherche d'un bug de navigateur ici, ou est-il buggy quelque chose dans mon code que je ne vois pas? C'est ma première tentative d'implémentation d'une classe js, il y a peut-être beaucoup de choses que je ne comprends pas.

Toute idée de la sage assemblée serait le bienvenu ici. Vous pouvez voir ce que je parle à:

http://neolography.com/staging/mrfm/spin-sim.html

Merci,

Jon

Répondre

2

Lorsque vous passez rechargerez vous indiquez au navigateur pour recharger - et non à partir du cache.

Il ne devrait pas être une surprise que vous obtenez les images du serveur.

Les images peuvent être préchargées en javascript avec le code suivant:

img = new Image(); 
img.src = "your/image/path"; 

Si vous voulez que les images chargées avant de les utiliser qui pourrait aider.

+0

oui, merci. Il existe en fait une routine de préchargement de ce type implémentée en utilisant 'jQuery(). Each()', et il semble fonctionner correctement lors du chargement à nouveau, ou dans un simple rechargement. Mais lors d'un rechargement forcé, le navigateur semble ignorer les images préchargées. – jjon

0

j'ai eu un coup d'œil à votre code et vous avez les éléments suivants dans document.ready()

function countLoadedImages() { 
     loadedImgs++; 
     if (loadedImgs == images.length){ 
      $("#loading-image").hide(); 
      $("#controls").fadeIn(100); 

     } 
    } 


    animation = new simAnim("snap", "stripchart", 800, deriveFrameData(spindata)); 

l'animation = nouvelle ligne Simanim est exécutée, peu importe si les 100 images sont chargées ou non ...

Une possibilité de résoudre ce problème serait de déplacer cette ligne dans la fonction countLoadedImages comme ceci:

function countLoadedImages() { 
     loadedImgs++; 
     if (loadedImgs == images.length){ 
      $("#loading-image").hide(); 
      $("#controls").fadeIn(100); 
      animation = new simAnim("snap", "stripchart", 800, deriveFrameData(spindata)); 

     } 
    } 

cette manière que la fonction sera exécutée une fois toutes les im âges ont chargé

+0

Merci d'avoir examiné mon code ekhaled. C'est une bonne idée. Malheureusement, cela n'aide pas. La partie du constructeur 'simAnim()' qui construit le canevas graphique fonctionne toujours correctement, et de toute façon, le bouton qui démarre l'animation ne peut pas être poussé tant que toutes les images ne sont pas chargées. Même ainsi, j'ai toujours le même comportement. J'avais pensé que shift-reload revenait à recharger la page ou à la charger dans une nouvelle fenêtre, mais il semble que ce ne soit pas le cas. Cela me fait penser que je suis en train de regarder un bug de navigateur, mais je ne reçois aucun feedback de firebug qui suggère un diagnostic. – jjon

Questions connexes