2013-05-11 2 views
3

Пока я загружаю файл в браузер, я хочу показать анимированную загрузку gif для пользователя. Но если файл очень большой, браузер кажется настолько загруженным, что анимация моего gif не работает. Что я могу сделать, чтобы визуализировать загрузку?JS - readAsDataURL блокирует активность браузера

HTML

<img id="loader" src="img/load.gif" /> 

JS

reader.readAsDataURL(file); 
reader.onloadend = function(){ 
    document.getElementById('loader').style.display='none'; 
    var source = reader.result; 
    document.getElementById('img').setAttribute('src', source); 
} 
document.getElementById('loader').style.display='block'; 
+0

Почему вы удалите свой предыдущий вопрос [] (http://stackoverflow.com/questions/16499969/js-readasdataurl-blocks-animated-gif) и повторно опубликовать один и тот же вопрос, только один минуту спустя? –

+0

Я не мог отредактировать заголовок, извините, я очень неуклюж. – poppel

ответ

0

В теории, что у вас есть должны работать, так как операция чтения асинхронным. Возможно, это обратный вызов onloadend, который блокирует выполнение. В любом случае, вы можете попробовать следующее:

reader.onloadend = function(){ 
    document.getElementById('loader').style.display='none'; 
    var source = reader.result; 
    document.getElementById('img').setAttribute('src', source); 
} 
document.getElementById('loader').style.display='block'; 
// Make sure to start loading only after the loader was displayed 
// (give the browser a chance to repaint) 
setTimeout(function() { 
    reader.readAsDataURL(file); 
}, 40); 
+0

thanx, я проверил его, gif анимируется на короткое время, а затем останавливается, когда начинается загрузка – poppel

+0

Я подозреваю, что узкое место загружает огромный URL-адрес данных в img элемент. Вместо этого попробуйте использовать холст. – bfavaretto

+0

Он также стоит на месте, когда я использую холст, но загрузка выполняется быстрее – poppel

0

Загруженное событие должно быть подключено первым. Попробуйте это:

reader.onloadend = function(){ 
    document.getElementById('loader').style.display='none'; 
    var source = reader.result; 
    document.getElementById('img').setAttribute('src', source); 
} 
reader.readAsDataURL(file); 

document.getElementById('loader').style.display='block'; 
Смежные вопросы