Jeg skal lave et popup vindue der automatisk åbner når man kommer ind på siden. Vinduet skal åbne midt på skærmen og må gerne have den der "shake" effekt, hvor hele vinduet ryster et kort øjeblik i starten.
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
prøv med at skrive dette i dit hovedvindue: <body onload="window.open('popup.htm','vindue','width=300,height=300');">
og i din popup.htm skriver du i headeren: <script type="text/javascript"> var num = 0; var range = 5; var times = 20; function shakeWindow() { x = (Math.round(Math.random()) == 1) ? Math.ceil(Math.random()*range) : -Math.ceil(Math.random()*range); y = (Math.round(Math.random()) == 1) ? Math.ceil(Math.random()*range) : -Math.ceil(Math.random()*range); self.moveBy(x,y); if (num++ == times) clearTimeout(timer); } timer = setInterval("shakeWindow();",50);
okay for at få den i midten kan du gøre noget i den her stil:
Hovedvindue: <script type="text/javascript"> function openWindow(url,width,height) { x = screen.width/2-width/2; y = screen.width/2-height; window.open(url,'vindue',"width="+width+",height="+height+",left="+x+",top="+y); } </script> </head> <body onload="openWindow('popup.htm',300,300)">
Angående den shake-effekt kunne du lige uddybe hvad den helt præcis går ud på. Jeg har selv testet min "shake-effekt" og den virker sådan set som jeg havde troet en shake-effekt skulle se ud.
Er du sikker på du har tilføjet shake-scriptet indeni i det vindue du åbner?
Smid et svar Skovenborg, nu virker det. Et lille tillægsspørgsmål: Hvad gør "var num= 0;" øverst i det første script? -Jeg synes ikke der sker de store ændringer, når jeg ændrer værdierne.
num er egentlig ikke en variabel som du har nogen glæde af at ændre. Og i teorien kunne du også bare udelade det og skrive: <script type="text/javascript"> var range = 5; var times = 20; function shakeWindow() { x = (Math.round(Math.random()) == 1) ? Math.ceil(Math.random()*range) : -Math.ceil(Math.random()*range); y = (Math.round(Math.random()) == 1) ? Math.ceil(Math.random()*range) : -Math.ceil(Math.random()*range); self.moveBy(x,y); if (times-- == 0) clearTimeout(timer); } timer = setInterval("shakeWindow();",50);
</script>
num var bare den der tælte op før, sådan at scriptet ikke fortsatte i en uendelighed. Jeg kan i grunden også lige forklare de to andre: times er (som du sikkert har gættet) hvor mange gange den skal "shake" range er i hvor stort omfang der skal ryste - en høj range betyder at vinduet kommer til at ryste mere voldsomt. Ud over det kan du også ændre 50-tallet i: timer = setInterval("shakeWindow();",50); på den måde kan du bestemme hvor hurtigt eller langsomt den skal shake.
For god ordens skyld ville jeg i en sammenligning bruge:
if(--times==0)
Fordi en -- (eller ++) sat foran udføres inden den pågældende forekomst af variablen valideres, mens valideringen først udføres bagefter med eftersatte ...
Eksempel:
I den viste kode vil times første gang sammenligningen foretages have værdien 20, og først efter at sammenligningen er udført vil den ændres til 19 !-)
Ligeledes vil rystelserne udføres 21 gange, da times når værdien 0 den 20. gang kodestumpen gennemløbes, men først _efter_ sammenligningen !o]
roenving >> Ja, du har helt ret. Spekulerede ikke lige så meget over om scriptet udførte det det rigtige antal gange - men jo for en god ordens skyld bør man skrive --times.
Synes godt om
Ny brugerNybegynder
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.