Avatar billede Peter Praktikant
03. juni 2004 - 16:48 Der er 20 kommentarer og
1 løsning

redirecte til side efter load+x antal sek. med php.

Hej
Jeg har et galleri hvor jeg er i gang med at lave et slideshow, dette indebærer jo at jeg skal redirecte brugeren efter x sekunder, dette virker fint med header('refresh, 5 url=..') hvor jeg bruger en ob_start() og ob_end_flush() for ikke at få output før redirect'en er sat igang. men problemet er nu, at hvis brugeren sidder på en langsom forbindelse og vælger 2 sek vil han muligtvis ikke nå at se billedet før der redirectes.
Så hvordan kan jeg uden brug af javascript give brugeren x antal sekunder efter hele siden er loaded?

Petter
Avatar billede roenving Novice
03. juni 2004 - 17:12 #1
Du kan sætte noget javascript på onload på billedet !-)

<img src="" onload="setTimeout('location.href=\'næsteSide.php\'',5000)">
Avatar billede Peter Praktikant
03. juni 2004 - 17:28 #2
det er selvfølgeligt en mulighed, men jeg ville gerne lave det med php da jeg ikke er voldsomt vild med javascript.
Avatar billede roenving Novice
03. juni 2004 - 17:32 #3
Du kan kun kende færdig-loadet på klient-siden !-)
Avatar billede Peter Praktikant
04. juni 2004 - 08:56 #4
det tænkte jeg desværre nok, så bliver jeg nødt til at lave noget clientside hvis dette skal virke ordentligt, øv.
Hvordan mon andre gallerier laver deres slideshows, med client- eller server-side, for det kan jo give et problem med serverside og langsomme forbindelser.
Avatar billede roenving Novice
05. juni 2004 - 17:27 #5
Jeg tror at langt de fleste baserer det på noget client-side, da load af et billede alene jo er mindre krævende end load af en hel side ...

-- så jeg ville gøre det med en liste af billed-navne og så udskifte det med javascript !-)

<script type='text/javascript'>
var picnames = new Array();

picnames[picnames.length] = 'billede1.jpg';
picnames[picnames.length] = 'billede2.jpg';
picnames[picnames.length] = 'billede3.jpg';
picnames[picnames.length] = 'billede4.jpg';
picnames[picnames.length] = 'billede5.jpg';
picnames[picnames.length] = 'billede6.jpg';
picnames[picnames.length] = 'billede7.jpg';

//lav listen så lang, som du ønsker !-)

//preload
var pics = new Array();
for(i=0;picnames.length>i){
  pics[i] = new Image();
  pics[i].src = picnames[i]
}

var num = 0;
function chgPic(){
  document.images['slide'].src = pics[num].src;
  num = (++num)%pics.length;
}

function showPic(src){
  window.open(src,'picWin');
}
</script>

...

<body onload="setInterval('chgPic()',5000)"><!-- 5 sekunder -->

<img name="slide" src="billede7.jpg" style="width:100px;" onclick="showPic(this.src);">
Avatar billede Peter Praktikant
05. juni 2004 - 17:33 #6
Ahh, der røg vi lige lidt videre end hvad jeg havde tænkt.
Jeg har allerede lavet et helt galleri som genereres af php med thumbs og meget andet on the fly udfra et hieraki (www.koeleindustrien.dk/test/galleri.php), så det skal blot være en lille del af et større galleri. Jeg har bestemt mig for at lave det med onload og <noscript> meta-viderestilling for at få så mange som muligt med.
Men tak for dit fine forslag i javascript, det kan bare ikke rigtigt bruges da mit galleri skal være så let at opdatere som muligt (uploade originale billeder til folder og intet andet).
Hvis du ligger et svar får du point.
Avatar billede Peter Praktikant
05. juni 2004 - 17:36 #7
Må nok hellere nævne at galleriet ikke er færdigt, det grafiske mangler i da jeg endnu ikke har lavet css. Derudover over har jeg ikke tilpasset thumbs-genereringen, jeg vil lave kvadratiske thumbs. Stor og original virker heller ikke endnu. Navigation efter at have vist alle billeder er heller ikke på plads endnu, man kan stadigvæk kun browse igennem de billeder der er i den mappe, det skal ændres til at man kan browse igennem de thumbs man er henvist fra.
Avatar billede roenving Novice
05. juni 2004 - 17:41 #8
Du kan sagtens lave noget af det i php, så du kan opdatere automatisk:

<script type='text/javascript'>
var picnames = new Array();

<?
while der stadig er billeder{
  echo "picnames[picnames.length] = '".picname."'";
}
?>
//lav listen så lang, som du ønsker !-)
Avatar billede Peter Praktikant
05. juni 2004 - 18:24 #9
Jeg ved ikke om vi snakker lidt forbi hinanden. PHP scanner filtræet og genererer lister af billeder ud fra dette. Da jeg skal meget mere end bare lave et slideshow synes jeg ikke rigtigt det kan svare sig at lave arrayet i javascript, desuden vil jeg også helst undgå javascript så meget som muligt for at få flest mulige brugere med.
På nuværende tidspunkt lader jeg php skrive kildekoden, php ved hvilket billede der er det næste, derfor har jeg ikke brug for javascript til at udvælge næste, jeg gør følgende:
<?php
echo "'onload-script'($nextUrl)";
?>
Jeg har ikke skrevet det præcist, men regner med du kan se hvad jeg mener.
Hvis der er noget jeg har misforstået mht hvorfor det vil være smartere at lade javascript overtage en større del af opgaven, så må du meget gerne sige til.
Avatar billede roenving Novice
05. juni 2004 - 19:23 #10
Det kommer selvfølgelig helt an på hvordan du ellers har lavet det ...

-- men ideen i det jeg skriver ovenfor er, at du netop scanner dit filtræ med php og så overfører dem til javascript-databasen ...

-- grundideen er den, at du ved at få klienten til at udføre så meget af arbejdet som muligt, sparer din server for det tilsvarende arbejde, og samtidig nedsætter du mængden af data, som skal overføres med al den html-kode og de elementer som er på resten af siden !-)

-- og hvis det er essentielt, at alle skal kunne se alt, skal man selvfølgelig ikke bruge javascript, men så bør man også overveje om man har råd til at bruge billeder, da der er devices som ikke kan gengive dem ...

-- og javascript kan ganske rigtigt blokeres på klienten, men de steder hvor det er blokeret (5% iflg. http://www.thecounter.com/stats/2004/May/javas.php, 8% iflg. http://www.w3schools.com/browsers/browsers_stats.asp) er mest de totalt-offentlige ...

-- og hvis man kigger på de to forskellige statistik-sider, vil det netop fremgå, at små forskelle i publikum vil give ganske store udsving, f.eks. tæller Mozilla over 10 gange så meget på w3schools ...

-- hvorom alt er, kan du alene sikre, at dine brugere får fuldt udbytte af dine billeder, hvis du bruger javascript client-side, og jeg kan se, at jeg i mit forslag 17:27:20 har taget fat i det uden at tænke på lige at der skulle være et antal sekunders syn på hvert billede, men jeg ville der også bare præsentere ideen i den slags !-)
Avatar billede Peter Praktikant
05. juni 2004 - 20:09 #11
Jeg kan godt følge dig, men er nu ikke enig.
Html-koden er meget lidt i forhold til billedet, så det vil jeg sige er ubetydeligt. De andre elementer på siden vil i langt de fleste tilfælde være gemt i cachen hos klienten, så det skal ikke overføres igen.
Hele ideen med mit galleri er netop at brugerne skal se billederne, så hvis man sidder og browser via lynx eller anden tekstbaseret browser går jeg ikke ud fra man går ind og browser i gallerier.
Det der klart må være mest krævende for serveren er at scanne mapperne efter billeder, resten er opslag i arrays og tilsvarende, så det man sparer ved at flytte visningen af billeder til clientside vil jeg mene er meget lidt. Som jeg ser det er 5% alligevel også mange at udelukke.
Hvad mener du med at brugerne kun får fuldt udbytte at billederne hvis jeg bruger javascript client-side. Som jeg ser det er det eneste jeg strengt taget har brug for er at viderestille med javascript når dette er tilgængeligt, derved opnår jeg at få vist mine billeder i præcist det antal sekunder brugeren vil have.
Avatar billede roenving Novice
05. juni 2004 - 20:19 #12
Ja, til det sidste, var det også hvad jeg mente i den første sætning i det sidste afsnit !-)

-- og så skal du jo lige regne med, at de af dine brugere, som bruger ie i en nyere version (jeg mener det er fra v5.5) faktisk checker ethvert element ved hver visning, hvis der er brugt den indstilling, ar der skal kontrolleres ved hvert besøg på siden !o]

-- men under alle omstændigheder skal du jo lave det, så du fornemmer, at du giver dine brugere de bedste muligheder for at se det, som du har tænkt det !-)
Avatar billede Peter Praktikant
05. juni 2004 - 20:33 #13
Men checker IE ikke bare om der er kommet en ny version af elementet i mellemtiden og downloader kun hvis der er?
Jeg kommer til at tænke på, at hvis jeg laver det med javascript så langt som muligt, så vil jeg jo ikke kunne linke direkte til et billede, dette vil jo være en stor ulempe.
Men konklusionen er, at jeg bruger javascript til at starte nedtælling ved færdigloadning, så ja, jeg kommer ikke udenom det. Jeg har det bedst med at minimere brugen af javascript, ved ikke helt hvorfor, for jeg kan godt se det er smart til nogle ting (andre ting er det røvhamrende irreterende at det kan).
Du må meget gerne give et svar, så får du nogle point.
Avatar billede roenving Novice
05. juni 2004 - 20:59 #14
1. Jo, men det tager næsten lige så lang tid, hvis det f.eks. er en lille knap-gif !-)

2.
-- nu er jeg selvfølgelig ikke klar over i hvilke situationer, du vil linke direkte til et billede, men det kom jeg tilfældigvis til at vise i det jeg lagde -- showPic(this.src) ...

3.
Lyder zq også godt nok !o]

-- men hvad er det, som er irriterende at javascript kan ?-)

-- og velbekomme '-)
Avatar billede roenving Novice
05. juni 2004 - 21:11 #15
Tak for point ;~}
Avatar billede Peter Praktikant
05. juni 2004 - 21:12 #16
1. Det er rigtigt, men jeg går da ud fra at IE så gør det lidt smart og sender samlet request i en tcp-pakke, det vil så stadigvæk være ekstra 1060 bytes der skal sendes og modtages.

2. Den er jeg ikke helt med på, men jeg vil f.eks skrive: domæne/galleri.php?dir=navn&pic=id og derved få vist et bestemt billede. Kunne man gøre noget lignende med javascript?
Når galleriet er færdigt vil det have de funktionaliteter du kan se på linket og det eneste der skal gøres er at uploade billeder til en folder på webhotellet. Jeg kan ikke rigtigt se man kan løse dette tilfredsstillende med javascript uden at blande en helt masse php ind i det.

Jeg bryder mig ikke om når mit browservindue bliver resized. Jeg synes det er enormt irreterende at have et trail af tal med dags dato flyvende efter musepilen. I den dur er der ting jeg synes er irreterende. Sådanne ting er sikkert ligesom med blinkende skrift og flammer overalt, de forsvinder med tiden. Der er helt sikkert i mange tilfælde hvor sådanne ting er meget smarte at kunne i andre sammenhænge, men nogle bruger det bare forkert og dermed generende.
Avatar billede Peter Praktikant
05. juni 2004 - 21:13 #17
Velbekomme og tak for hjælpen.
Avatar billede roenving Novice
05. juni 2004 - 22:04 #18
ad 2:

Det kan du sagtens, men hvis du f.eks. bruger php til i virkeligheden at sende forskellige størrelse billeder (altså resizede !-) kan javascript ikke være med, men opbyggelse af links m.m.m. er ikke det fjerneste problem ...

Men du har ret i, at læsningen af mappen kun kan ske på serveren !o]

-- ja, jeg har også svært ved at se nytten i resize på et originalt browser-vindue, men det kan sagtens udnyttes fornuftigt på popups, se f.eks. http://roenving.users.whitehat.dk/WD1ResizeTilBillede.html

-- og at en mulighed kan misbruges er jo ikke en grund til at fjerne den, hvis den ellers kan bruges til meget fornuftigt !-)

-- jeg brækker mig også i lårtykke stråler, når jeg møder sådan en flagrende hale af elementer efter musen ...
Avatar billede Peter Praktikant
07. juni 2004 - 08:55 #19
Jeg bruger rent faktisk selv en resize på et popupvindue som galleriet er skruet sammmen lige nu. Derudover har jeg noget self.close on focus off. Det er meget avanceret og alting, men efter min mening er problemet med det, at folk ved ikke hvordan det opfører sig og bliver derfor forvirret når vinduet lukker af sig selv. Anden mulighed var så at lade være med at lukke vinduet, men så er der lige pludseligt 10 åbne vinduer. Tredje mulighed er at bruge samme popup, men så skal brugeren hele tiden skifte i mellem to vinduer. Derfor synes jeg at i mit galleri er det en bedre løsning at vise billedet i det originale browservindue med mulighed for navigation ved hvert billede. Man kunne selvfølgeligt også lave navigation i popup-vinduet, men så synes jeg ideen med et popup vindue her går lidt af.

Det er helt klart som du siger, der er ingen grund til at fjerne funktionalitet fordi det kan misbruges af nogle som satser andre steder mht brugervenlighed. Nogle synes jo det er totalt fedt med en trailt af hjerter, bolde eller lign. efter musen. Jeg har heller ikke selv slået javascript fra, det ville betyde jeg gik glip af for meget positiv funktionalitet synes jeg. Til gengæld gør mange sider i dag brug af javascript hvor det faktisk ikke er strengt nødvendigt, f.eks en foldeudmenu, det kan jo lige så fint laves med css. Lige så snart man bevæger sig ud i gråzonen af hjemmesider (hacks og cracks sider f.eks), så bliver fordelene ved javascript pludseligt vendt. Så det afhænger meget af siderne man ser synes jeg.
Avatar billede roenving Novice
07. juni 2004 - 18:54 #20
Lader til at enigheden breder sig voldsomt *g*
Avatar billede Peter Praktikant
07. juni 2004 - 22:23 #21
Jo, enigheden breder sig vel, men jeg har nu på fornemmelsen at vores grundholdninger mht brug af javascript på egne sider er forskellig, men sådan er det jo, forskellige mennesker forskellige preferencer.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester