Просмотр полной версии : unload для multiloadera
задача:
загрузить несколько файлов и отобразить их загрузку одним прогресбаром.
делаю:
начинаю загрузку файла, узнаю его размер, выгружаю, когда все размеры посчитаны - начинается окончательная загрузка.
проблема:
unloadClip MovieClipLoader-а анлоадит только после полной занрузки.
unloadMovie работает, но нет возможности отследить ошибку загрузки (таймаут не гарантия реального отсутствия файла).
пробовал даже LoadVars. узнаю размер. удаляю лоадер - загрузка продолжается. а если изменить ссылку, то с начала грузит файл по новой ссылке, а потом продолжает закачивать старый.
А зачем ты анлоадиш, нельзя загрузить все сразу?
как это загрузить все сразу?
мне же нужно отобразить все на одном прогресбаре. типа ща загружено 10 байт из 100 000 милионов.
пока загрузка не начнется, неизвестно какой размер у файла.
фокс вообще по одному файлу грузит. если через MovieClipLoader делать, то постоянно прогресбар прыгает от 100 к 0 и обратно Ж(
если простым лоадМуви, то вроде как все кучей пытаются загрузиться, но невозможно отследить ошибку загрузки, с появлением MovieClipLoader простое лоадМуви выдает в детБайтТотал -1 до начала загрузки, а не как рашьше (в 6-ке), только когда файла такого нет.
а получается, что если загрузка начата, то остановить ее уже нельзя (
firelord
04.02.2007, 13:07
у меня такая же задача, я решил - разбивать прогресс бар на зоны - каждая - для своего файла. они, естественно, получатся неравномерные (правда, можно прикинуть приблизительно относительный размер зон в зависимости от размеров файлов). а выгружать что-то уже загруженное хотя бы на 1% - мне кажется, это идеологически неправильно - ведь лоадер ради загрузки, а не загрузка - ради лоадера ;)
firelord
04.02.2007, 13:13
кстати, пришла в голову такая идея - можно ведь считать размер файла напрямую - через сокет! только ведь во флеше нет обычного сокета? XMLSocket не даст ведь к заголовкам обратиться? а так можно было бы открыть файл, считать заголовки, забрать Content-length - и вперед - к построению прогресс бара ;)
как вариант: собирать информацию о всех загрузках в onLoadProgress:
var urls=["p1.jpg","p2.jpg"];
var loader=new MovieClipLoader();
loader.addListener(this);
var movies=[];
for(var i=0;i<urls.length;i++){
var mc=this.createEmptyMovieClip("mc"+i,i)
movies.push(mc);
loader.loadClip(urls[i],mc);
}
function onLoadProgress(){
for(var i=0,l=0,t=0;i<movies.length;i++){
var gp=loader.getProgress(movies[i]);
l+=gp.bytesLoaded;
t+=gp.bytesTotal;
}
trace(l+"/"+t);
}
2 silin
с двумя файлами нет проблем. а когда файлов больше 10-ти ?
MovieClipLoader в фоксе не начнет загрузку вторго файла не загрузив первый.
2 firelord
ели бы я знал заранее размер файлов... )
2 all
сейчас читаю про возможности javascript в определении наличия файла. возможности потестить нет. ни у кого подобного опыта нет?
Почему нельзя использовать в качестве индикатора процесса загрузки не число загруженных байт, а количество файлов, которые уже загружены (общее их число всегда можно получить, если захотеть)?
с двумя файлами нет проблем. а когда файлов больше 10-ти ?
MovieClipLoader в фоксе не начнет загрузку вторго файла не загрузив первый.
дада, это нюанс..
пропустил, сори
тогда, хотя бы не грузить целиком, а только до первого получения инфы:
class LoadSizer {
var arr:Array=[];
var loader:MovieClipLoader;
var tmpMC:MovieClip;
var totalSize:Number=0;
var current:Number=0;
var addListener,broadcastMessage;
function LoadSizer(urls:Array){
AsBroadcaster.initialize(this);
loader=new MovieClipLoader();
tmpMC=_root.createEmptyMovieClip("tmpMC",_root.getNextHighestDepth());
loader.addListener(this);
arr=urls;
loader.loadClip(arr[current],tmpMC);
}
function onLoadProgress(){
totalSize+=loader.getProgress(tmpMC).bytesTotal;
current++;
if(current<arr.length){
loader.unloadClip(tmpMC);
loader.loadClip(arr[current],tmpMC);
}else{
broadcastMessage("onReady",totalSize);
tmpMC.removeMovieClip();
}
}
}
var urls=["p1.jpg","p2.jpg"];
var losdSizer=new LoadSizer(urls);
losdSizer.addListener(this);
function onReady(total){
trace(total);
}
зы: туплю, потом посмотрел.., ты вроде так и делаешь..
Слушайте, а чего юзера то пугать, флэш же выдает размер не сжатый, то есть если помимо картинок еще грузить и свф, то размер может в 2-3 раза больше реально скаченного.
Ну когда это было просто ну совсем необходимо (показывать кол-во байт) при условии что файлы скачивались с нашего сервера, просто запускался пхп скрипт на сервере которому передавался список файлов, скрипт же возвращал размер на каждый файл, потом это показывалось и грузилось.
2 silin
я это уже пробовал.
проблема:
unloadClip MovieClipLoader-а анлоадит только после полной занрузки.
можно написать все приходящие на ум анлоады, делиты, ремувы, удалить слушателя и сам загрузчик. НО ЗАГРУЗКУ НЕ ОСТАНОВИТЬ (((
2 7thsky™
я на php уже сделал. но когда, например, плашка с логотипами (типа банер) или еще что мелкое требует php, то это как-то ...
да и вопрос то не в том, какимим обходными путями решить проблему.
Вариантов я виже три:
1. может кто-то смог, как-то, вылечить unloadClip MovieClipLoader-а.
2. или знает как отследить ошибку загрузки для LoadMovie.
3. или все делается намного проще и легче, и расскажет как.
а как делать, если у нас есть три кнопки. при нажатии на кнопку, надо загрузить свои ЦАТЬ файлов. пользователь нажал на первую кнопку. увидел прелоадер обещающий ему пол часа загрузки и решил, что обойдется он без этого раздела и хочет посмотреть другой.
прервать загрузку я не могу. или мне ему принудительно рефреш страници делать?
вроде бы новая загрузка в тот же мувик убивает текущую
т.е. если запустить загрузку како-либо мизерного файла, то можно съэкономить трафик юзера, но надо проверять..
зы:в своем примере я loader.unloadClip(tmpMC) только для порядку написал, должно работать и без него..и как бы не должна до конца..если тем же лоадером в тот же мувик грузить
да много что должна, только всем простила
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.