2009-10-16 3 views
1

Я представляю простую анимацию, используя img.src замену и тег <canvas>. В настоящее время ожидается, что он будет работать только в FireFox (FF 3.5.3, Mac OS X 10.5.5), поэтому кросс-браузерная совместимость еще не является проблемой.shift-reload in FF дает неожиданные результаты

Когда страница загружается впервые или загружается в новое окно или вкладку, все работает, как ожидается, и поведение кэша при простой перезагрузке не кажется проблемой; однако, если я попытаюсь заставить перезагрузить с перезагрузкой, у меня возникнет проблема. Несмотря на то, что изображения предварительно загружены, предварительно загруженные изображения для анимации, похоже, не доступны браузеру, который затем пытается загрузить каждый новый img.src с сервера.

Я смотрю здесь ошибку браузера, или есть что-то нехорошее в моем коде, которое я не вижу? Это мой первый выстрел в реализации js-класса, поэтому здесь может быть много чего, чего я не понимаю.

Любое понимание собранных мудрых здесь будет приветствоваться. Вы можете увидеть, что я говорю о в:

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

Спасибо,

Jon

ответ

0

Благодаря ekhaled, кто пытался. Я уверен, что это ошибка браузера: Mozilla bug #504184

У меня есть урезанный пример в http://neolography.com/staging/shift-reload/shift-reload-testcase.html, который я оставлю. Я призываю всех проголосовать за эту ошибку в отслеживателе ошибок mozilla, чтобы она была исправлена.

j

2

Когда вы переносите перезагружать вы рассказываете браузер перезагружать - не из кэша.

Так что не удивительно, что вы получаете изображения с сервера.

Изображения могут быть предварительно загружены в JavaScript с помощью следующего кода:

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

Если вы хотите изображения загружены, прежде чем использовать их, которые могли бы помочь.

+0

да, спасибо. На самом деле существует процедура предварительной загрузки именно такого рода, реализованная с помощью 'jQuery(). Each()', и, похоже, она работает нормально при загрузке заново или в простой перезагрузке. Но при принудительной перезагрузке браузер, похоже, игнорирует предварительно загруженные изображения. – jjon

0

Я посмотрел на свой код, и у вас есть следующие в document.ready()

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

     } 
    } 


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

анимация = новая simAnim линия выполняется независимо от того, будут загружены или не все 100 изображений ...

Одна из возможностей, чтобы исправить это было бы переместить эту строку внутри функции countLoadedImages так:

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

     } 
    } 

таким образом, что функция будет выполняться один раз все им возрасты загружены

+0

Спасибо за изучение моего кода ekhaled. Это хорошая идея. К сожалению, это не помогает. Часть конструктора 'simAnim()', которая строит холст графика, все еще работает нормально, и в любом случае кнопка, запускающая анимацию, не может быть нажата до загрузки всех изображений. Тем не менее, я по-прежнему получаю такое же поведение. Я думал, что смена-перезагрузка эквивалентна загрузке страницы заново или загрузке ее в новое окно, но похоже, что это не так. Это заставляет меня думать, что я смотрю на какую-то ошибку браузера, но я не получаю никакой обратной связи от firebug, которая предлагает диагноз. – jjon

Смежные вопросы