Hi, wie ihr euch sicher denken könnt hab ich ein Problem, eher mehrere.
Es geht ums verschieben von boxen, speziell aber um die Höhe dabei.
Also erstmal alles von vorne, ich will bzw. ich hab 3 verschiedene Möglichkeiten eine box zu verschieben.
Die Erste ist die ganz einfache, wo man auf die Titelzeile der box klickt und bei gedrückter Mause die gesammte Box verschoben wird. Hier gibt es keine Probleme.
Die zweite Variante ist die, wo man auf die Titelzeile klick. Hierbei wird die box im DOM geklont. Diesen Klon verschiebt man, die Originalbox bleibt da wo sie ist. Läßt man nach erfolgreichen verschieben die Mause los wird der Klon gelöscht und die Originalbox wird zur gewünschten Stelle verschoben.
Hier hätte ich gerne das die geklonte Variante beim schieben durchsichtig (wie ein gespenst) wird ich weiß nur nicht wie.
Bei der dritten Variante, klickt man wiederrum auf die Titelzeile.
Ich unterscheide hier mal in Variante 3.1 und 3.2.
Variante 3.2:
Hierbei wird ein vorhandenes Div an die Stelle der Box positioniert und auf ihre Größe "eingestellt". Diesem Div wird weiterhin nur eine gestrichelter Rand gegeben. Dieses Div verschiebt man dann wie in der 2ten Variante.
Ich möchte eigentlich der Box keine feste Höhe geben aber hier ist das Problem. Um das Div auf die Größe der Box zubringen brauch ich eine Höhe, gebe ich der Box keine Höhe wird das Div nur 0 hoch.
Zu dem kann es dabei zu Problemen kommen mit "min-height" und "max-height".
Variante 3.1:
Hierbei wird die Originalbox geklont. Direkt unter dem box_div befindet sich ein weiteres div:
Bei der geklonten Variante wird dieses div auf 'hidden' gestellt. Hier ist das Problem das dadurch zwar die
Größe der Box beibehalten wird aber alles weiß ist, ich möchte aber eigentlich alles durchsichtig haben. Wie in der Variante 3.2, wie kann man das hinbekommen?
Den Quellcode findet ihr weiter unten.
Hier noch eine andere Frage:
ich möchte auch sowas einbauen wo man die box größer und kleiner machen kann, indem man den Rand anfässt und zieht.
Gibt es da irgendwo code der einen da weiter bringen kann?
Ich hab mir überlegt in der box noch drei weitere divs einzubauen, einen rechts, einen unten und einen rechts unten. Alle drei sind natürlich nur einpaar pixel hoch bzw. breit.
Wenn ein div angeklickt wird und bei geklickter Maus gezogen wir, wird der unterschied, der zum Klickpunkt entsteht, von der Höhe bzw. der Breite oder beidem abgezogen.
Nur hier tritt wieder das Problem mit der nicht gesetzten Höhe auf! Gibt es hier irgendwelche Vorschläge, aber immer bdenken es soll keine feste Höhe gesetzt werden, auch nicht prozentual.
Hier mal der quellcode, ich hab den aber vereinfacht:
Alles anzeigen
Es geht ums verschieben von boxen, speziell aber um die Höhe dabei.
Also erstmal alles von vorne, ich will bzw. ich hab 3 verschiedene Möglichkeiten eine box zu verschieben.
Die Erste ist die ganz einfache, wo man auf die Titelzeile der box klickt und bei gedrückter Mause die gesammte Box verschoben wird. Hier gibt es keine Probleme.
Die zweite Variante ist die, wo man auf die Titelzeile klick. Hierbei wird die box im DOM geklont. Diesen Klon verschiebt man, die Originalbox bleibt da wo sie ist. Läßt man nach erfolgreichen verschieben die Mause los wird der Klon gelöscht und die Originalbox wird zur gewünschten Stelle verschoben.
Hier hätte ich gerne das die geklonte Variante beim schieben durchsichtig (wie ein gespenst) wird ich weiß nur nicht wie.
Bei der dritten Variante, klickt man wiederrum auf die Titelzeile.
Ich unterscheide hier mal in Variante 3.1 und 3.2.
Variante 3.2:
Hierbei wird ein vorhandenes Div an die Stelle der Box positioniert und auf ihre Größe "eingestellt". Diesem Div wird weiterhin nur eine gestrichelter Rand gegeben. Dieses Div verschiebt man dann wie in der 2ten Variante.
Ich möchte eigentlich der Box keine feste Höhe geben aber hier ist das Problem. Um das Div auf die Größe der Box zubringen brauch ich eine Höhe, gebe ich der Box keine Höhe wird das Div nur 0 hoch.
Zu dem kann es dabei zu Problemen kommen mit "min-height" und "max-height".
Variante 3.1:
Hierbei wird die Originalbox geklont. Direkt unter dem box_div befindet sich ein weiteres div:
Bei der geklonten Variante wird dieses div auf 'hidden' gestellt. Hier ist das Problem das dadurch zwar die
Größe der Box beibehalten wird aber alles weiß ist, ich möchte aber eigentlich alles durchsichtig haben. Wie in der Variante 3.2, wie kann man das hinbekommen?
Den Quellcode findet ihr weiter unten.
Hier noch eine andere Frage:
ich möchte auch sowas einbauen wo man die box größer und kleiner machen kann, indem man den Rand anfässt und zieht.
Gibt es da irgendwo code der einen da weiter bringen kann?
Ich hab mir überlegt in der box noch drei weitere divs einzubauen, einen rechts, einen unten und einen rechts unten. Alle drei sind natürlich nur einpaar pixel hoch bzw. breit.
Wenn ein div angeklickt wird und bei geklickter Maus gezogen wir, wird der unterschied, der zum Klickpunkt entsteht, von der Höhe bzw. der Breite oder beidem abgezogen.
Nur hier tritt wieder das Problem mit der nicht gesetzten Höhe auf! Gibt es hier irgendwelche Vorschläge, aber immer bdenken es soll keine feste Höhe gesetzt werden, auch nicht prozentual.
Hier mal der quellcode, ich hab den aber vereinfacht:
Quellcode
- function selectMouse(e)
- { //unterscheidet zwischen firefox und ie
- e = (e) ? e : ((window.event) ? window.event : "");
- var p = (e.target) ? e.target : e.srcElement;
- //verify that user clicked the 'titlebar' element
- if(p.attributes['id'] && p.attributes['id'].value.indexOf('titlebar_') != -1){
- x=e.clientX; //Mouse postion wird gemerkt (x-Achse)
- y=e.clientY; //Mouse postion wird gemerkt (y-Achse)
- //es wird die Box herrausbekommen, die wir gerade "anfassen"
- var pstr=p.attributes['id'].value;
- var temp=pstr.substring(pstr.indexOf('_')+1,pstr.length);
- if(document.getElementById('box_'+temp)){
- isDrag=true;
- box=document.getElementById('box_'+temp);
- if(Variante 2 oder 3){
- verschiebung_setzen('g');
- //get the box coordinates
- tx=parseInt(box.style.left);
- ty=parseInt(box.style.top);
- box.style.zIndex=zindex;zindex++;
- if(box2 != null)
- box2.style.zIndex=zindex;zindex++;
- }
- else if(Variante 1){
- tx=parseInt(box.style.left);
- ty=parseInt(box.style.top);
- box.style.zIndex=zindex;zindex++;
- }
- }
- }
- }
- function mouseMove(e)
- {
- if (isDrag) //only move the box if the user is dragging it
- {
- e = (e) ? e : ((window.event) ? window.event : "");
- //das if verhindert das die box über den sichbaren Bereich nach !oben! verschoben werden kann
- if((e.clientY + (ty - y)) > -1){
- if(Variante 2 und 3){
- if(box2 != null){
- box2.style.left = e.clientX + (tx - x);
- box2.style.top = e.clientY + (ty - y);
- }
- }else{ //Variante 1
- box.style.left = e.clientX + (tx - x);
- box.style.top = e.clientY + (ty - y);
- }
- }
- }
- }
- function verschiebung_setzen(zutun){
- if(box != null){
- switch(zutun) {
- case "g": //groß
- if(Variante 3.1 oder Variante 2){
- box2 = box.cloneNode(true);
- box.parentNode.insertBefore(box2, box);
- if(Variante 3.1){
- for(var i=0; i< box2.childNodes.length; i++)
- if(box2.childNodes[i].attributes && box2.childNodes[i].attributes.id && box2.childNodes[i].attributes.id.nodeValue == CONST['unsichtbar']){
- box2.childNodes[i].style.visibility = "hidden";
- break;
- }
- }
- box2.style.border='2px dashed rgb(0, 0, 0)';
- }else if(Variante 3.2){
- if(document.getElementById("verschieben")){
- box2=document.getElementById('verschieben');
- box2.style.top = box.style.top;
- box2.style.left= box.style.left;
- box2.style.width= box.style.width;
- box2.style.height= box.style.height;
- box2.style.border='2px dashed rgb(0, 0, 0)';
- }
- }
- break;
- case "k": //klein
- /*
- unwichtig
- */
- break;
- default: break;
- }
- }
- }