20. maj 2007 - 08:41Der er
47 kommentarer og 1 løsning
placering af billeder i div - overlappet
Jeg har en div, placeret x antal pixels nede på en side. Ved load, hentes x antal thumbs som skal placeres i ovennævnte div. Billederne skal placeres overlappet med +20px fra top af div og +60px fra left af div. Hvert billede skal have en tekst hen over sig, og der skal være link på hvert billede.
Ovenstående skal selvfølgelig virke i alle gængse browsere.
Har rodet ca. 8 timer med nedenstående script, men må som sædvanlig give totalt op overfor java script:
function PosImageLayer(id) {
var Ltop = document.getElementById('Layer30').style.top; var Lleft = document.getElementById('Layer30').style.left;
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
... og hvordan plusser man i javascript? Efter en bog jeg har, lægger man 2 tal sammen således:
10 += 20;
Jeg har gået i folkeskole i 10 år, og efter min bedste overbevisning skal resultatet være 30. I Javascriptens verden giver det dog 1020!!!
Plusser man således 5 gange i en lykke giver det 102020202020 for det 5. billede. Det er fame langt ude i browservinduet man således skal finde de sidste overlappede billeder!
Grunden til at resultatet ikke bliver 30 er at Ltop bliver fortolket som en streng da style.top er en streng (f.eks "10px"). Så hvis din Layer30 er placeret ved top=0 og left=0 vil dine to variable Ltop og Lleft indeholde to tomme strenge (""). Når du så herefter bruger + og += fortolker javascript det som en concatenation der bare sammenkæder de to variable. Altså:
"10" += 20 bliver til "1020"
Løsningen for dig ville måske være at bruger offsetTop/Left i stedet da den returnerer en numerisk værdi og ikke en streng. Og for at scriptet også skal virke i andre browsere end IE skal du assigne style.left indeholdende en "px"-værdi altså:
style.left = Lleft + "px";
Så dit scriptet med de ændringer jeg foreslår:
function PosImageLayer(id) { var Ltop = document.getElementById('Layer30').offsetTop; var Lleft = document.getElementById('Layer30').offsetLeft;
Hov, der nåede du jo så at svare selv. :) Og som du rigtigt nok har gjort skal du lave en metode posX og posY som rekursivt kalder sig selv med offsetParent (hvis der er nogen). Dette skyldes at Mozilla f.eks altid giver offset'et af et element relativt til hele siden hvorimod Opera giver et offset relativt til det element som omslutter offset-elementet. :)
Så skal du bare huske at at tilføje +"px" til din style.left i løkken! :)
roenving: Billederne kommer fra en database (Mysql), og bliver hentet med PHP. Jeg kender ikke dimensionerne af et billede der ligger ovenfor, og derfor ikke pos. af div, jeg kender ikke antallet af thumbs der kommer (kunne jeg selvf. med et ekstra kald), og ved klik på en af mine thumbs skal det valgte billede lægge sig forrest (skifte placering af alle thumbs), enten via et udvidet script af ovenstående, eller via reload af siden.
... så vidt jeg ved kan man kun positionere layers ovenpå hinanden ved position: absolute. Billederne skal nok vises som baggrundsbilleder i layers, da der (måske) skal være en lille tekst ovenpå hvert billede.
-- den eneste grund til at jeg i ovenstående eksempel har benyttet mig af width, var fordi det billede, jeg brugte ikke passede så godt i dimensionerne, det er principielt ligegyligt !-)
Næste problem er at jeg ikke kender antallet af billeder ved <body onload="... Siden med ovenstående er nemlig inkluderet. Hvordan kører man et Javascript, eksempelvis lige før </body>?
Koden (rolig, jeg skal nok få lavet det til en funktion):
Kan du ikke vente med at udskrive til du kender tallet, som jo må komme fra din database ?-)
-- og at placere et script er lovligt stort set hvorsomhelst i et html-dokument (dog ikke udenfor body- eller head-tagget, så der må være noget, der kommer i vejen, med din stopCookie-funktion ...
Ovenstående cookie har ikke noget med det oprindelige spørgsmål at gøre. Det var blot et tillægsspørgsmål. Nedenstående kode virker, men ikke det JavaScript jeg postede 08:07:27:
Den eneste forskel på sæt eller slet er om tiden er 0 eller >0
SkrivCookie ser således ud (egentlig irellevant, da den virker):
function skrivCookie(name,value,expTime,path){//Tid i dage switch(skrivCookie.arguments.length){ case 1,2: var expTime = 0; var path = "/"; case 3: var path = "/"; } var exp = new Date().getTime()+expTime*24*60*60*1000; exp = new Date(exp).toGMTString(); var cook = name + " = " + escape(value) + ";expires=" + exp + ";path=" + path; document.cookie = cook; }
... og hvorfor bruger jeg JS cookies og ikke PHP cookies: Fordi jeg gerne vil have et output på skærmen før cookien slettes. PHP Sessions er udelukket (gud opfandt dem i vrede)
Nå, så har jeg samme problem med en anden funktion der bare ikke virker. Det vil sige den virker ved body onload, klik på en button(onClick), men ikke hvis jeg blot skriver:
Som du ser, sker der f.eks. ikke noget, når den står her. På samme måde er det helt afgørende, hvilket miljø den står skrevet i på din side. Prøv noget mere kode =)
Pointfordeling: Selvom jeg i princippet selv løste mit oprindelige problem, lærte jeg lidt af crazysnap & roenving. Problemet med slet at cookie med Javascript (29/05-2007 16:25:39), blev aldrig løst. Satte jeg en positiv tid, blev levetiden forlænget. Med en negativ tid skete der intet.
Det fik jeg vidst ikke prøvet. Jeg skal vende tilbage med det engang. Siden er total omskrevet nu, men jeg har en lignende side hvor jeg kan prøve. Nu har jeg ikke en ordentlig håndbog over Javascript (WWW -Illustreret håndbog fra 1996 *SSS*), men skulle en cookie ikke slettes, blot tiden er negativ? Jeg prøvede med en måned bagud, men lige lidt hjalp det :-(
Jeg kan ikke huske det konkrete, men der er også noget med hvornår der eksekveres en rettelse af tidsstemplet og browseren fjerner den fra sin aktive hukommelse (noget med, at det kun er sikkert, hvis browseren har været lukket !-)
Hmmm, derfor burde den jo stadig være ugyldig, hvis datoen er før d.d. Det lyder mere og mere som sessions i PHP. De har heller ingen virkning før næste sidekald!
Det er svært at blive klogere på noget, man ikke ved, hvad er. Jeg har aldrig oplevet tilsvarende problemer med cookies - så jeg må formode, du har lavet nogle fejl, der ikke har været diskuteret i denne tråd =)
Kan det mon skyldes, at de ting, du gør ved en cookie, ikke afspejles i samme dokument - men i efterfølgende dokumenter?
*LoL* ja, hvis du har gjort det, er der nok ikke så meget at sige til, det ikke funkede. Somme tider er det zq nogle sære ting, vi får skrevet i koderne ;D
Det er bare sjovt der virker med en forlængelse af tiden, blot ikke med sletning, men så meget er jeg heller ikke inde i JavaScriptens og html'ens underfundigheder ;-)
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.