nd: event und style.left/top zum Bewegen von DIVs

Beitrag lesen

Hi,

bitte probiert mal folgendes aus:

{window.htm} <CUT> <html>

<head> <title>Window</title> <script language="javascript" src="window.js"></script> </head>

<body> <script language="javascript"> <!-- var myWindowClose=true; var mainWindow=myWindowNew("Window",myWindowClose,true,"","",false,false); --> </script> test <script language="javascript"> <!-- myWindowEnd(mainWindow); --> </script> <script language="javascript"> <!-- var myWindowClose=true; var mainWindow=myWindowNew("Window2",myWindowClose,true,"","",false,false); --> </script> test <script language="javascript"> <!-- myWindowEnd(mainWindow); --> </script> </body>

</html> </CUT>

{window.js} <CUT>

// Variablen initialisieren var myWindows=new Array();// Fenster var myWindow="";// Aktuelle Fenster ID (als Buffer beim Bewegen des Fensters) var myWindowsColorBorder="silver";// Rahmenfarbe var myWindowsColorTitleback="blue";// Titelfarbe var myWindowsColorTitlefont="white";// Titelschriftfarbe var myWindowsColorWorkspaceback="white";// Hintergrundfarbe der Arbeitsfläche var myWindowsColorWorkspacefont="black";// Hintergrundfarbe der Arbeitsfläche var myWindowsColorBar="silver";// Hintergrundfarbe der Menubar und der Statusbar var myWindowsColorBarfont="black";// Schriftfarbe in der Statusbar var myWindowsTitlefont="Tahoma";// Schriftart für die Titelleiste var myWindowsTitlefontSize="15";// Schriftgröße der Titelleite in Pixel (px)

// Neues Fenster öffnen function myWindowNew(title,close,minmax,closefnc,icon,menubar,statusbar){   // Fensterdaten initialisieren   myWindow=myWindows.length;   myWindows[myWindow]=new Array();   myWindows[myWindow][0]=title;// Fenstertitel   myWindows[myWindow][1]=close;// Schließen-Button?   myWindows[myWindow][2]=0;// Status   // Status:   // 0 = Normal   // 1 = Maximiert   // 2 = Minimiert (von normal)   // 3 = Minimiert (von maximiert)   // 9 = Geschlossen   myWindows[myWindow][5]=closefnc;// Externe Schließen-Funktion   myWindows[myWindow][6]=menubar;// Menubar?   myWindows[myWindow][7]=statusbar;// Statusbar?   // Fenster-Code generieren   document.writeln('<div id="myWindow'+myWindow+'" style="position:relative" onClick="this.style.zIndex=999;">');   document.writeln('<table border="0" cellpadding="0" cellspacing="0" id="myWindowTable'+myWindow+'" style="border:3px solid '+myWindowsColorBorder+' double">');   document.writeln('<tr height="20" onMousedown="myWindowMoveBegin('+myWindow+');" onMouseup="myWindowMoveEnd('+myWindow+');" onMousemove="myWindowMove('+myWindow+');"  onMouseout="myWindowMoveEnd('+myWindow+');">');   document.writeln('<td style="background-color:'+myWindowsColorTitleback+';border-bottom:3px solid '+myWindowsColorBorder+' double;cursor:default" onDblClick="myWindowMax('+myWindow+');" id="myWindowTitle'+myWindow+'">');   document.writeln('<table border="0" cellpadding="0" cellspacing="0" width="100%"><tr>');   if(icon!=""){     // Fenstericon oben links     document.writeln('<td align="center" valign="middle" width="20" onClick="myWindowMin('+myWindow+');" style="cursor:pointer"><p><img src="'+icon+'" border="0" width="16" height="16"></p></td>');   }   document.writeln('<td style="padding:3px;font-family:'+myWindowsTitlefont+';font-size:'+myWindowsTitlefontSize+'px;color:'+myWindowsColorTitlefont+'"><p><b>'+title+'</b></p></td>');   if(minmax){     // Minimieren / Maximieren Button     document.writeln('<td align="center" valign="middle" width="20" onClick="myWindowMin('+myWindow+');" style="cursor:pointer;font-family:webdings;color:'+myWindowsColorTitlefont+'"><p>0</p></td>');     document.writeln('<td align="center" valign="middle" width="20" onClick="myWindowMax('+myWindow+');" style="cursor:pointer;font-family:webdings;color:'+myWindowsColorTitlefont+'"><div id="myWindow'+myWindow+'Re" style="display:inline"><p>1</p></div></td>');   }   if(close){     // Close Button     document.writeln('<td align="center" valign="middle" width="20" onClick="myWindowHide('+myWindow+');" style="cursor:pointer;font-family:webdings;color:'+myWindowsColorTitlefont+'"><p>r</p></td>');   }   document.writeln('</tr></table></td>');   document.writeln('</tr>');   if(menubar){     // Menubar     document.writeln('<tr height="20" id="myWindowMenubarArea'+myWindow+'" style="background-color:'+myWindowsColorBar+'"><td nowrap><div id="myWindowMenubar'+myWindow+'" style="display:inline;width:100%;height:100%">');     document.writeln('</div></td></tr>');   }   // Arbeitsbereich beginnen   document.writeln('<tr id="myWindowWorkspace'+myWindow+'">');   document.writeln('<td style="background-color:'+myWindowsColorWorkspaceback+';color:'+myWindowsColorWorkspacefont+'" valign="top"><div style="width:100%;height:100%;overflow:scroll;padding:10px">');   // Fenster ID zurückgeben   return myWindow; }

// Fenster abschließen function myWindowEnd(windowId){   // Arbeitsbereich abschließen   document.writeln('</div></td>');   document.writeln('</tr>');   if(myWindows[windowId][7]){     // Statusbar     document.writeln('<tr id="myWindowStatusbarArea'+windowId+'" height="20" style="background-color:'+myWindowsColorBar+';border-top:3px solid '+myWindowsColorBorder+' double"><td nowrap><div id="myWindowStatusbar'+myWindow+'" style="display:inline;width:100%;height:100%;color:'+myWindowsColorBarfont+'">');     document.writeln('</div></td></tr>');   }   // Fenstercode abschließen   document.writeln('</table>');   document.writeln('</div>');   // Fensterbreite und -höhe merken / speichern   myWindows[myWindow][3]=document.getElementById('myWindow'+myWindow).style.width;// Fensterbreite   myWindows[myWindow][4]=document.getElementById('myWindow'+myWindow).style.height;// Fensterhöhe   myWindows[myWindow][8]=document.getElementById('myWindow'+myWindow).style.width;// Originale Fensterbreite   myWindows[myWindow][9]=document.getElementById('myWindow'+myWindow).style.height;// Originale Fensterhöhe   myWindow=""; }

// Fenster maximieren / wiederherstellen function myWindowMax(windowId){   if(myWindows[windowId][2]==0){     // Fenster auf Maximum     document.getElementById('myWindow'+windowId).style.left=0;     document.getElementById('myWindow'+windowId).style.top=0;     document.getElementById('myWindowTable'+windowId).style.width='100%';     document.getElementById('myWindowTable'+windowId).style.height='100%';     if(myWindows[windowId][2]==2||myWindows[windowId][2]==3){       // Arbeitsbereich anzeigen       document.getElementById('myWindowWorkspace'+windowId).style.display="inline";     }     // Status setzen und Button ändern     myWindows[windowId][2]=1;     document.getElementById('myWindow'+windowId+'Re').innerHTML="<p>2</p>";   }else{     // Fenster wiederherstellen     myWindowRe(windowId);   } }

// Fenster minimieren function myWindowMin(windowId){   // Fensterbereiche ausblenden   document.getElementById('myWindowWorkspace'+windowId).style.display="none";   if(myWindows[windowId][6]){     document.getElementById('myWindowMenubarArea'+windowId).style.display="none";   }   if(myWindows[windowId][7]){     document.getElementById('myWindowStatusbarArea'+windowId).style.display="none";   }   // Fenstergröße merken   myWindows[windowId][3]=document.getElementById('myWindowTable'+windowId).style.width;   myWindows[windowId][4]=document.getElementById('myWindowTable'+windowId).style.height;   // Fenstergröße auf Minimum   document.getElementById('myWindowTable'+windowId).style.width=0;   document.getElementById('myWindowTable'+windowId).style.height=0;   // Status setzen und Button ändern   document.getElementById('myWindow'+windowId+'Re').innerHTML="<p>2</p>";   if(myWindows[windowId][2]==0){     myWindows[windowId][2]=2;   }else{     myWindows[windowId][2]=3;   } }

// Fenster wiederherstellen function myWindowRe(windowId){   // Fenstergröße wiederherstellen   document.getElementById('myWindowTable'+windowId).style.width=myWindows[windowId][3];   document.getElementById('myWindowTable'+windowId).style.height=myWindows[windowId][4];   if(myWindows[windowId][2]==2){     // Normale Fenstergröße wiederherstellen     document.getElementById('myWindowTable'+windowId).style.width=myWindows[windowId][8];     document.getElementById('myWindowTable'+windowId).style.height=myWindows[windowId][9];     // Fensterbereiche einblenden     document.getElementById('myWindowWorkspace'+windowId).style.display="inline";     if(myWindows[windowId][6]){       document.getElementById('myWindowMenubarArea'+windowId).style.display="inline";     }     if(myWindows[windowId][7]){       document.getElementById('myWindowStatusbarArea'+windowId).style.display="inline";     }     // Status setzen und Button ändern     document.getElementById('myWindow'+windowId+'Re').innerHTML="<p>1</p>";     myWindows[windowId][2]=0;   }else if(myWindows[windowId][2]==3){     // Letzte Fenstergröße wiederherstellen     document.getElementById('myWindowTable'+windowId).style.width=myWindows[windowId][3];     document.getElementById('myWindowTable'+windowId).style.height=myWindows[windowId][4];     // Fensterbereiche einblenden     document.getElementById('myWindowWorkspace'+windowId).style.display="inline";     if(myWindows[windowId][6]){       document.getElementById('myWindowMenubarArea'+windowId).style.display="inline";     }     if(myWindows[windowId][7]){       document.getElementById('myWindowStatusbarArea'+windowId).style.display="inline";     }     // Status setzen     myWindows[windowId][2]=1;   }else{     // Normale Fenstergröße wiederherstellen     document.getElementById('myWindowTable'+windowId).style.width=myWindows[windowId][8];     document.getElementById('myWindowTable'+windowId).style.height=myWindows[windowId][9];     // Status setzen und Button ändern     document.getElementById('myWindow'+windowId+'Re').innerHTML="<p>1</p>";     myWindows[windowId][2]=0;   } }

// Fenster schließen function myWindowHide(windowId){   // Fenster ausblenden   document.getElementById('myWindow'+windowId).style.display="none";   // Status setzen   myWindows[windowId][2]=9;   if(myWindows[windowId][5]!=""){     // Externe Close-Funktion aufrufen     eval(myWindows[windowId][5]);   } }

// Fenster bewegen function myWindowMove(windowId){   if(myWindow==''+windowId+''){     // Fenster verschieben und Cursor ändern     document.getElementById('myWindow'+windowId).style.left=event.clientX-32;     document.getElementById('myWindow'+windowId).style.top=event.clientY-32;     document.getElementById('myWindowTitle'+windowId).style.cursor="move";   } } function myWindowMoveBegin(windowId){   if(myWindows[windowId][2]==0||myWindows[windowId][2]==2){     // Fenster ID in den Buffer schreiben     myWindow=windowId;     // Cursor ändern     document.getElementById('myWindowTitle'+windowId).style.cursor="move";   } } function myWindowMoveEnd(windowId){   // Fenster ID aus Buffer löschen   myWindow="";   // Cursor auf Standardcursor ändern   document.getElementById('myWindowTitle'+windowId).style.cursor="default"; }

// Fensterstatus ändern function myWindowStatus(windowId,text){   if(myWindows[windowId][6]){     // Statustext setzen     document.getElementById('myWindowStatusbar'+windowId).innerHTML=text;   } }

function t(text){   window.status=text; } </CUT>

Einfach diese beiden Dateien in ein Verzeichnis legen und die window.htm im M$IE öffnen. Nun sollten zwei Fenster zu sehen sein: Eins mit dem Titel "Window" und eins mit "Window2". Die Fenster kann man minimieren, maximieren, schließen und bewegen. Mit "Window" klappt das auch prima, aber bei "Window2" bekomme ich es einfach nicht hin, dass sich das Fenster so verschieben lässt, wie "Window" - obwohl es mit dem gleichen JavaScript-Code generiert wurde.

Hat vielleicht jemand eine Ahnung, wo der Fehler liegt? Ich blicke da nicht mehr durch... Für mich sieht das alles richtig aus - ist allerdings selbst geschrieben, vielleicht sehe ich ja den Wald vor lauter Bäumen nicht mehr...

Gruß nd