05. december 2004 - 17:33Der er
11 kommentarer og 1 løsning
flush() i javascript?
Hej Eksperter
Jeg står med en forholdvis tung funktion. Funktionen åbner eller lukker en masse mapper (nogle gange over 100) og virker på samme måde som stifinder - reelt set sætter den bare style.display='none' eller '' på websiden. PRoblemet er blot hvis man trykker på "plus" (for at folde alle underliggende mapper ud) fryser browseren i ca. 5-10 sekunder fordi den skal folde alle mapperne ud.
Findes der en funktion i Javascript der "flusher" det resultat man er nået til "nu", så den ikke fryser browseren i flere sekunder, men i stedet udfører funktionen gradvist.
Håber i forstår.
PS: Med flush() mener jeg flush-funktionen fra PHP
Nej, det findes ikke - men med mindre, der er tale om et vanvittig stort træ med 1000-vis af noder, lyder det somom, du bør optimere din JavaScript-kode.
Det kan godt være min kode ikke er helt optimalt. Hvis du har tid/lyst kan du prøve at kigge på mine funktioner her. Du behøver ikke sætte dig 100% ind i scriptet (det kan måske være lidt svært at forstå??), men hvis du bare kunne sige om jeg henadvejen laver nogle dumme fejl der tager meget "kraft" eller om du umiddelbart kan se nogle smarte alternativer, ville det være kanont dejligt.
Her kommer scriptet: stop_by = new Array(); var current_action;
function swap(start_by,stop_by) { if(!stop_by) { alert('Folde-ud funktionen for denne mappe er endnu ikke klar. Lad siden loade.'); } else { i2=0; for(i=start_by;stop_by>=i;i++) { if(document.getElementById('div_'+i)) { if(document.getElementById('div_'+i).style.display=='' || current_action=="closing") { if(!current_action) current_action="closing"; setTimeout("close_dir("+i+");",i2*10); close_dir(i); } else if(document.getElementById('div_'+i).style.display=='none') { if(!current_action) current_action="opening"; setTimeout("open_dir("+i+");",i2*10); open_dir(i); } i2++; } } } current_action=""; } function open_dir(start_by) { document.getElementById('div_'+start_by).style.display=''; document.getElementById('operator_'+start_by).src='gfx/minus.gif'; document.getElementById('img_'+start_by).src='gfx/dir_open.gif'; } function close_dir(start_by) { document.getElementById('div_'+start_by).style.display='none'; document.getElementById('operator_'+start_by).src='gfx/plus.gif'; document.getElementById('img_'+start_by).src='gfx/dir_closed.gif'; }
Det kommer helt anpå, hvad det er, du skal bruge det til. Da du har mange elementer, der skal behandles, bør du nok overveje at lave det objekt orienteret. OOP (Objekt Orienteret Programmering) er dog en meget anden måde at programmere på, så det er ikke lige til at forklare i korte træk - der er en hel del faldgrubber :)
*host-host* grundlæggende er de to temmelig forskellige. PHP er klasse-baseret og JavaScript er prototype-baseret og det giver en anden måde at arbejde på :)
razmuz_dk >> Det vigtige er, at du får opbygget et JS-objekt som din data-struktur - og som indeholder alle metoder. HTML'en på siden er blot 'håndtag' til JS-maskinen - og al manipulering af visningen foregår fra objektet, hvor HTML-elementerne indgår som properties. At vise et godt DHTML eksempel, kan hurtigt gå hen og blive en tidskrævende ting :)
hehe, tankegangen er den samme. Jeg vil nu også mene at den klassebaserede er den "rigtige" - men nu starter jeg sikkert en lille envejs dialog hæhæ =oD
Med al respekt, Peter ... hele kernen i OOP er nedarvning og hieraki. Her er klasse- og prototype-baseret tankegang fundamentalt forskellig - hvilket de fleste netop oplever ved overgang mellem PHP og JS (eller omvendt) :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.