14. maj 2006 - 06:33Der er
27 kommentarer og 1 løsning
Hvordan lukker jeg et window hvis dette er åbent
Jeg forsøger at lave et script der kan åbne et eller flere forskellige vinduer, men jeg vil gerne at hvis man forsøger at åbne et vindu der allerede er åbent... så lukkes dette og åbner igen
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
*LooL* - det må være i et kommende sprog, webstuff ;o)
Jesper >> det kommer lidt anpå, hvordan det skal bruges (den der slide-effekt er iøvrigt sikkert sjov at lege med, men ikke synderlig køn eller hensigtsmæssig set fra brugerens side). Du kan altid spørge om et vindue er åbent via dets closed-property - men præcist hvordan du skal gøre i din kode ved jeg ikke, når jeg ikke kender den :)
Takker ... men det er scriptet der skal chekke om vinduet er åbent...og hvis det er så lukke det før det åbner det igen.
ole:
Om den efekt er køn eller ej er jo en smagssag, ideen kommer fra nogle fotografer der gerne ville have deres galleri til at fylde hele skærmen og derfor gerne ville have siden til at resize, men jeg mener det er et big NO-NO at pille ved folks vinduesstørelser, så jeg lavede deres side således at galleriet åbnede i et popup der fyldte skærmen, det kunne det godt lide, men en spurgte om man kunne åbne det på en mere "smart" måde, og efter lidt søgen fandt jeg denne slide-efekt.
Nu forsøger jeg at lave scriptet om til en action, som man kan bruge til at stille de forskellige parameter man ønske for popupvinduet, (Størelse/placering/chrome osv.) og om muligt have flere popup-windows med forskellige navne. de problemer jeg kæmper med lige nu er udover det med at lukke et iforvejn åbent vindue, er at få popup-vinduet i NN/FF til at blive øverst
Her er hele kode:
function JMSlideOpenWindow(action) { var openSide = action[1]; if (openSide == "#"){ openSide = "(Empty Reference!)"; } var stepNed = action[2]*2; var stepHen = action[2]*3; var winWidth = window.screen.availWidth; var winHight = window.screen.availHeight; var vinHoej = action[5]; var vinBred = action[6]; var maxHoej = action[7]; var maxBred = action[8]; var vinTop = action[9]; var vinVens = action[10]; var sideHoej = 1; var sideBred = 1; for (i=11; i<=17; i++) { action[i] = (action[i] == true) ? "yes" : "no"; } var vinOpt = ""; vinOpt += ",resizable="+ action[11]; vinOpt += ",scrollbars=" + action[12]; vinOpt += ",menubar=" + action[13]; vinOpt += ",toolbar=" + action[14]; vinOpt += ",directories=" + action[15]; vinOpt += ",status=" + action[16]; vinOpt += ",location=" + action[17]; // -------------------------------------------------------------------------- if (maxHoej == true ){ vinTop = 0; vinHoej = winHight; } if (maxBred == true){ vinVens = 0; vinBred = winWidth; } if (vinHoej == ""){ vinHoej = 0; } if (vinBred == ""){ vinBred = 0; } if (action[4] == true){ vinTop = (winHight-vinHoej)/2; vinVens = (winWidth-vinBred)/2; vinTop = Math.round(vinTop); vinVens = Math.round(vinVens); if (vinHoej < 1){ vinTop = 0; vinHoej = winHight; } if (vinBred < 1){ vinVens = 0; vinBred = winWidth; } } if (action[3] == true){ vinTop = 0; vinVens = 0; vinHoej = winHight; vinBred = winWidth; } var vinSet = ""; vinSet += ",left=" + vinVens; vinSet += ",top=" + vinTop; // -------------------------------------------------------------------------- // Luk "PopVindueNavn" hvis det er aabent // -------------------------------------------------------------------------- vindue = window.open("","PopVindueNavn",vinSet+",width=1,height=1,"+vinOpt); vindue.window.moveTo(vinVens,vinTop); for (sideHoej = 1; sideHoej < vinHoej; sideHoej += stepNed){ vindue.resizeTo(1,sideHoej); } for (sideBred = 1; sideBred < vinBred; sideBred += stepHen){ vindue.resizeTo(sideBred+6,sideHoej); } vindue.location = openSide; }
Hmmmm ... så var det måske din opgave at tale dem fra det. Som sagt er det sikkert ganske 'fancy' ... men efter at have set 10 vinduer åbne på den måde, er jeg ret sikker på, brugeren i dén grad længes efter en beroligende kop kaffe og kun tænker på at komme væk fra sitet så hurtigt, som muligt ;o)
Anyway, så er du nødt til at sætte vinduesnavnet som en global-variabel, så du kan tilgå den, næste gang scriptet køres. Det kunne gøres sådan:
Giv evt. billedfilerne navne, der afspejler deres størrelse: minBil_120_340.jpg minKonesBil_140_250.jpg - osv
Det kan let gøres, hvis man uploader via HTTP-protokollen, da man så kan sætte GDLib (eller en anden server-komponent) til at finde billedets dimensioner og skrive dem ind i navnet.
Så er det let at åbne et vindue i den rigtige størrelse til billedet - centreret og pænt placeret :)
function JMSlideOpenWindow(action) { if (window.vindue && !window.vindue.closed) window.vindue.close(); ... osv, osv ...
Vil det sige at det er "vindue" der så er vinduets navn ??? I såfald skal jeg da lige arbejde lidt... da der gerne skulle kunne være mere en et vindu åben med foskellige navne
BTW: jeg har læst et sted at if (window.vindue && !window.vindue.closed) giver IEmac fejl og bør skrives som if (!window.vindue.closed && window.vindue) ! først
IE-Mac er noget antikvarisk skidt med oldnordisk JS-understøttelse, så det undrer mig ikke, den ikke kender window-objektets closed-property ... men om du skriver det den ene vej rundt - eller den anden - kan jeg ikke se, gør nogen forskel :)
Nej 'vindue' er ikke vinduets navn, men en variabel, der indeholder en reference til vinduets window-objekt. Navnet er andet argument i open-metoden: 'PopVindueNavn'.
Ja, den sidste var også til dig. Hvis du nøjagtigt ved, hvor stort hvert billede er, behøver du ikke 'slide' vinduet, når det åbnes. Du kan åbne det i den korrekte størrelse i første hug :)
>IE-Mac er noget antikvarisk skidt med oldnordisk JS-understøttelse
Det kan jeg kun give dig ret i :-) men hvis fixet er så let som at bytte rundt window.vindue og !window.vindue.closed så er der jo igen grund til ikke at gøre det
>Nej 'vindue' er ikke vinduets navn, men en variabel, der indeholder en reference til vinduets window-objekt. Navnet er andet argument i open-metoden: 'PopVindueNavn'.
Pyha ... Så har jeg da ikke helt misforstået hvad jeg har arbejdet med
>Hvis du nøjagtigt ved, hvor stort hvert billede er, behøver du ikke 'slide' vinduet, når det åbnes. Du kan åbne det i den korrekte størrelse i første hug :)
Er nu heller ikke det der er tanken med det script ;-) ... brugt sådan kan jeg kun være enig i ad det vil være noget skidt. Måden jeg har brugt den efekt på er til fullsize sider, hvor brugeren logger ind på startsiden.. hvorfra der åbnes et nyt vindue (på en lidt mere spænden måde) i full, Således man ikke ødelægger brugerens vindue-indstillinger. og til at åbne gallerier (ikke de enkelte billeder) med thumbs ol.
var openWindows = {}; // Shorthand for 'new Object()'
- og så kan du skrive noget à la: winName = "PopVindueNavn"; // Kan evt. være sendt med til funktionen som argument if (openWindows[winName]) { openWindows[winName].close(); delete openWindows[winName]; } openWindows[winName] = window.open("",winName,vinSet+",width=1,height=1,"+vinOpt);
Nu kan du åbne så mange vinduer, du vil - men så snart du forsøger at åbne et vindue med samme navn, vil det bestående først blive lukket. Mon ikke det kommer tættere på dine ønsker? :)
lyder meget som det jeg er ude efter :-) Det vil jeg prøve at lege med...
Bare for at misbruge dine kundskaber lidt mere Kan du fortælle mig hvordan jeg tvinge vinduet til at være øverst ?? Hvis jeg bruger sciptet onload (eller klikker det frem 2 gang) kommer det nederst ?
ikke hvis du mener mht at vinduet lægger sig bagerst ande gang... men havde nu tænkt mig at oprette et nyt spørgsmål til det ... (Et spørgsmål pr tråd ikk ? )
Viser sig også at jeg tog munde for fuld da jeg sade det virkede. (Men var åbenbart bare et "synsbedrag") Scriptet opføre sig 95% som jeg vil have det til. men det lukker ikke vinduer der er åbne
Jesper >> Kan du ikke lige kaste mig en mail på Gmail.com? Du må selv gætte, hvad der står foran @'et ... men du kan jo prøve det, der ligger mest ligefor ;o)
Jo... kan da prøve... normalt passer jeg ellers lidt på med min mail
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.