Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 06:33 Der 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

vinduet åbnes med dette

vindue = window.open("","PopVindueNavn",vinSet+",width=1,height=1,"+vinOpt);

jeg vil at det samme script skal kunne bruges på flere forskellige vinduer

Hele scriptet er her
http://www.jart.dk/jgom/SlideOpenWindow-7.html

(andre Forslag til forbedringer/ændringer modtages gerne. da jeg er meget ny udi javascript)
Avatar billede webstuff Nybegynder
14. maj 2006 - 09:46 #1
sådan her?

<script type="text/javascript">
function PopUpVindue(vindue){
  window.close(vindue);
  window.open(vindue);
}
</script>

<a href="#" onClick="PopUpVindue('hejsa');">Åbn vinduet "Hejsa"</a>
Avatar billede olebole Juniormester
14. maj 2006 - 15:44 #2
<ole>

*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  :)

/mvh
</bole>
Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 16:36 #3
webstuff :

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;
}
Avatar billede olebole Juniormester
14. maj 2006 - 17:09 #4
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:

window.vindue = window.open("","PopVindueNavn",vinSet+",width=1,height=1,"+vinOpt);

- så kan du i toppen skrive:

function JMSlideOpenWindow(action) {
    if (window.vindue && !window.vindue.closed) window.vindue.close();
    ... osv, osv ...
Avatar billede olebole Juniormester
14. maj 2006 - 17:14 #5
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  :)
Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 17:19 #6
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
Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 17:20 #7
den anden fattede jeg ikke...hvar den til mig ???
Avatar billede olebole Juniormester
14. maj 2006 - 19:48 #8
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  :)
Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 22:00 #9
>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.
Avatar billede olebole Juniormester
14. maj 2006 - 22:50 #10
1) Helt enig - men jeg kan bare ikke finde logikken i, at det skulle hjælpe at bytte dem rundt  :)

2) Det er jo altid glædeligt  ;o)

3) Så folder jeg armene ind, sætter mig ned og fletter næb og fumlevorter  ;D
Avatar billede olebole Juniormester
14. maj 2006 - 23:05 #11
I stedet kunne du oprette et globalt objekt:

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?  :)
Avatar billede olebole Juniormester
14. maj 2006 - 23:08 #12
nøøøøhhh ... du bliver nødt til at spørge sådan:

if (openWindows[winName] && !openWindows[winName].closed) {

- eller omvendt  :)
Avatar billede jesper-moeller Nybegynder
14. maj 2006 - 23:12 #13
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 ?
Avatar billede roenving Novice
15. maj 2006 - 00:07 #14
En mulig løsning er:

<script type="text/javascript">
var newWin = {"closed":true};

function openWin(url){
  if(!newWin.closed)
    newWin.close();
//resten af koden
  newWin = window.open(...)

}
</script>
Avatar billede jesper-moeller Nybegynder
16. maj 2006 - 09:50 #15
Takker

virker efter hensigt nu....
eneste problem er hvis jeg kalder funktionen anden gang så ligge slidevinduet bag vinduet det kaldes fra ?


Men Smid gerne et svar så jeg kan give point
Avatar billede roenving Novice
16. maj 2006 - 15:51 #16
-- også med den sidste ?-)
Avatar billede jesper-moeller Nybegynder
16. maj 2006 - 16:46 #17
roenving

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 ? )
Avatar billede olebole Juniormester
16. maj 2006 - 17:06 #18
win = window.open(...........)
win.focus()
Avatar billede olebole Juniormester
16. maj 2006 - 17:07 #19
- sat i den kode, du bruger ... og den er jeg ikke helt sikker på, hvad er for tiden  ;D
Avatar billede jesper-moeller Nybegynder
16. maj 2006 - 19:40 #20
Takker så ydmygt :-)

Eneste jeg magler er et svar så jeg kan give point...*S*
Avatar billede olebole Juniormester
16. maj 2006 - 20:17 #21
- og det kommer her  :)
Avatar billede jesper-moeller Nybegynder
16. maj 2006 - 23:33 #22
Ikke meget svar der... *G*

Men ok...*S*

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

http://www.jart.dk/jgom/slideopenwindow-test-1.html


(Næsten snyd man ikke kan give mere end 200 point.... *S*... har vist snart opbrugt hvad der kan forventes for 200)
Avatar billede olebole Juniormester
17. maj 2006 - 00:50 #23
Ups ... skæv finger  :D
Avatar billede olebole Juniormester
17. maj 2006 - 00:56 #24
var openWindows = {};

- skal anbringes udenfor alle funktioner ... 'globalt' skrev 'manden':
    "I stedet kunne du oprette et globalt objekt" - (14/05-2006 23:05:06)

;o)
Avatar billede olebole Juniormester
17. maj 2006 - 00:57 #25
- ellers opretter du jo et nyt objekt, hvergang funktionen køres - og det gamle overskrives
Avatar billede olebole Juniormester
17. maj 2006 - 01:15 #26
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)
Avatar billede jesper-moeller Nybegynder
17. maj 2006 - 01:21 #27
Nu virker det LIDT for godt...*G* ...

http://www.jart.dk/jgom/slideopenwindow-test-11.html

tro jeg skal have en lille pause indlagt ??
Den lukker vinduet...åbner det igen (som planlagt)
og så lukker den det igen
Avatar billede jesper-moeller Nybegynder
17. maj 2006 - 01:22 #28
Jo... kan da prøve... normalt passer jeg ellers lidt på med min mail
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