Avatar billede lizardine Nybegynder
23. juni 2003 - 14:56 Der er 3 kommentarer og
1 løsning

Resize div layer

Hey

Jeg har nappet et lille script der kan flytte div lag rundt på skærmen. Men det kunne være rigtig fedt hvis man også kunne ændre størrelsen på disse lag ved at trække i dem - f.eks. at man trækker i nederste højre hjørne også scalere laget.

Koden jeg har nappet ser således ud:


<head>
<title>BrainJar.com: Generic Drag Demo</title>

<link href="/common/default.css" rel="stylesheet" type="text/css" />
<style type="text/css">

.box {
  background-color: #ffff00;
  border: 1px solid #000000;
  color: #000000;
  padding: 0px;
  position: absolute;
}

.bar {
  background-color: #008080;
  color: #ffffff;
  font-weight: bold;
  padding: 2px 1em 2px 1em;
}

.content {
  padding: 1em;
}

</style>
<script type="text/javascript">//<![CDATA[

//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {

  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop  = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",  dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,  true);
    document.addEventListener("mouseup",  dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",  dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,  true);
    document.removeEventListener("mouseup",  dragStop, true);
  }
}

//]]></script>
</head>
<body>

<!-- Normal page content. -->

<div id="boxA" class="box" style="left:100px;top:150px;">
   
    <table cellspacing="0" cellpadding="0" border="1">
        <tr>
            <td onmousedown="dragStart(event, 'boxA')">Drag Box A</td>
        </tr>
        <tr>
            <td>This is just at text for A</td>
        </tr>
        <tr>
            <td align="right">Traek her >></td>
        </tr>
    </table>


</div>

<div id="boxB" class="box" style="left:300px;top:150px;">
   
    <table cellspacing="0" cellpadding="0" border="1">
        <tr>
            <td onmousedown="dragStart(event, 'boxB')">Drag Box B</td>
        </tr>
        <tr>
            <td>This is just at text for B</td>
        </tr>
        <tr>
            <td align="right">Traek her >></td>
        </tr>
    </table>


</div>


</body>
</html>


På forhånd tak.
Avatar billede =maddog= Nybegynder
23. juni 2003 - 17:28 #1
Er det her noget du føler du kan arbejde med? Sorry men min egen Resizer er så filtret sammen med min DragManager at jeg bliver nød til at bruge begge:

<head>
<title>BrainJar.com: Generic Drag Demo</title>

<link href="/common/default.css" rel="stylesheet" type="text/css" />
<style type="text/css">

.box {
  background-color: #ffff00;
  border: 1px solid #000000;
  color: #000000;
  padding: 0px;
  position: absolute;
}

.bar {
  background-color: #008080;
  color: #ffffff;
  font-weight: bold;
  padding: 2px 1em 2px 1em;
}

.content {
  padding: 1em;
}
</style>
<script type="text/javascript">//<![CDATA[

/*** Her definerer vi vore lag etc. ***/

onload = function() {
    System = new Object();
    System.buffer = new Array(); //buffer til strings
    System.drag = new DragManager();
    System.drag.init();
    System.chrome = new Array();
    System.chrome["resResize"] = "images/resizer.gif"; // HER SKAL STIEN TIL RESIZEREN'S BILLED ANGIVES
    if  (document.getElementById) {
        var boxA = document.getElementById("boxA");
        // Vi bliver nød til at scripte bredde og højde. Sorry men sådan er livet
        boxA.style.width="150px";
        boxA.style.height="100px";
        new Resizer(boxA,12,12);
        var boxA_pull = document.getElementById("boxA_pull");
        boxA_pull.proxy = boxA;
        System.drag.register(boxA_pull);

        var boxB = document.getElementById("boxB");
        // Vi bliver nød til at scripte bredde og højde. Sorry men sådan er livet
        boxB.style.width="150px";
        boxB.style.height="100px";
        new Resizer(boxB,12,12);
        var boxB_pull = document.getElementById("boxB_pull");
        boxB_pull.proxy = boxB;
        System.drag.register(boxB_pull);
    }
}


/*** Al mekanikken - ikke direkte vigtigt ***/

if  (window.Node) {
    // Først extender vi Moz/NS så vi undgår codebranching
    Event.prototype.__defineGetter__("clientX", function() { return this.pageX; } );
    Event.prototype.__defineGetter__("clientY", function() { return this.pageY; } );
    Event.prototype.__defineGetter__("offsetX", function () { return this.layerX; } );
    Event.prototype.__defineGetter__("offsetY", function () { return this.layerY; } );
    Event.prototype.__defineGetter__("srcElement", function () {
        var node = this.target;
        while (node.nodeType != 1) node = node.parentNode;
        return node;
    });
    HTMLDivElement.prototype.__defineGetter__("scrollTop", function() {
        if (isNaN(parseInt(this.firstChild.style.top))) this.style.top="0px";
        return parseInt(this.style.top);}
    );
    HTMLDivElement.prototype.__defineSetter__("scrollTop", function(t) {this.style.top=t+"px";} );
    HTMLDivElement.prototype.__defineGetter__("scrollLeft", function() {
        if (isNaN(parseInt(this.style.left))) this.style.left="0px";
        return parseInt(this.style.left);}
    );
    HTMLDivElement.prototype.__defineSetter__("scrollLeft", function(t) {this.style.left=t+"px";} );
}

function JImage(x,y,w,h,parent) {
    var img = document.createElement('IMG');
    setStyle(x,y,w,h,0,img);
    img.parent = parent;
    if (parent.appendChild) parent.appendChild(img);
    return img;
}

function setStyle(x,y,w,h,col,obj) {
    obj.style.position = 'absolute';
    if(x||x==0)obj.style.left = x + 'px';
    if(y||y==0)obj.style.top = y + 'px';
    if(w||w==0)obj.style.width = w + 'px';
    if(h||h==0)obj.style.height = h + 'px';
    if(col||col==0)obj.style.backgroundColor = col
}

function Resizer (parent,w,h) {
    w=(w)?w:16;h=(h)?h:16;
    this.knob = new JImage(parseInt(parent.style.width)-w,parseInt(parent.style.height)-h,w,h,parent);
    if (System) System.drag.register(this.knob);
    this.knob.style.cursor = "NW-resize";
    this.knob.topBound = 0;
    this.knob.leftBound = 0;
    this.knob.invokeOnGrab = function(e) {
        if (!this.parent.isAnchored) {
            this.parent.style.border = "2px dashed red";
        }
    }
    this.knob.invokeOnMove = function(e) {
        if (!this.parent.isAnchored) {
            this.parent.style.width = (parseInt(this.style.left)+w)+"px";
            this.parent.style.height = (parseInt(this.style.top)+h)+"px";
        }
    }
    this.knob.invokeOnRelease = function(e) {
        if  (this.parent.resize) {
            this.parent.resize(this.parent.style.width,this.parent.style.height);
        }
        this.parent.style.border = "1px outset #d0d0d0";
    }
    this.knob.setChrome = function() {
        if (System&&System.chrome["resResize"]) this.setAttribute("src",System.chrome["resResize"]);
    }
    this.knob.setAttribute("alt","Resize");
    this.knob.setChrome();
    return this.knob;
}

function DragManager() {
    this.registeredElements = new Array();
   
    this.register = function(element) {
        // see if any removed element slots are available
        for (i=0;i!=this.registeredElements.length;i++) {
            if(this.registeredElements[i]==null) {
                this.registeredElements[i]=element;
                return;
            }
        }
        // Otherwise expand the register by one
        this.registeredElements[this.registeredElements.length]=element;
        // update
        this.update();
        // mark the element so we don't register twice
        element.markedForDrag = true;
    }
    this.remove = function(element) {
        // locate and remove the element if present.
        for (i=0;i!=this.registeredElements.length;i++) {
            if(this.registeredElements[i]==element)
                this.registeredElements[i]=null;
        }
        this.update();
        // demark the element
        element.markedForDrag = false;
    }
    this.grabElement = function(e) {
        // See if the source is registered and select if so
        if(e)event=e;
        for (i=0;i!=this.registeredElements.length;i++) {
            if(this.registeredElements[i]==event.srcElement) {
                this.selected=event.srcElement;
                break;
            }
        }
        if (this.selected!=null) {
            this.selected = (this.selected.proxy)?this.selected.proxy:this.selected;
            this.selected.style.zIndex = this.zIndex++;
            this.offsetX = event.clientX-(isNaN(parseInt(this.selected.style.left))?0:parseInt(this.selected.style.left));
            this.offsetY = event.clientY-(isNaN(parseInt(this.selected.style.top))?0:parseInt(this.selected.style.top));
            if (this.selected.invokeOnGrab!=null)
              this.selected.invokeOnGrab(e);
        }
    }
    this.dragElement = function(e) {
        if(e)event=e;
        if(this.selected) {
            if(this.selected.isAnchored) return;
            theoreticalLeft = event.clientX-this.offsetX;
            theoreticalTop = event.clientY-this.offsetY;
            if(!this.selected.verticalLock) {
                if (this.selected.topBound!=null||this.selected.topBound==0)
                  theoreticalTop=(theoreticalTop<this.selected.topBound)?this.selected.topBound:theoreticalTop;
                if (this.selected.bottomBound!=null||this.selected.bottomBound==0)
                    theoreticalTop=(theoreticalTop>this.selected.bottomBound)?this.selected.bottomBound:theoreticalTop;
                this.selected.style.top = theoreticalTop+"px";
                if (this.selected.invokeOnMove)
                  this.selected.invokeOnMove(e);
            }

            if(!this.selected.horizontalLock) {
                if (this.selected.leftBound||this.selected.leftBound==0)
                  theoreticalLeft=(theoreticalLeft<this.selected.leftBound)?this.selected.leftBound:theoreticalLeft;
                if (this.selected.rightBound||this.selected.rightBound==0)
                    theoreticalLeft=(theoreticalLeft>this.selected.rightBound)?this.selected.rightBound:theoreticalLeft;
                this.selected.style.left = theoreticalLeft+"px";
                if (this.selected.invokeOnMove)
                  this.selected.invokeOnMove(e);
            }

        }
        return false; // avoid event propagation downwards.
    }
    this.releaseElement = function(e) {
        if(this.selected) {
            if (this.selected.invokeOnRelease)
                this.selected.invokeOnRelease(e);
            this.selected=null;
        }
           
    }
}
DragManager.prototype.init = function() {
    document.zIndex = 0;                     
    if (!window.Element) {
    document.onmousedown = this.grabElement;
    document.onmousemove = this.dragElement;
    document.onmouseup = this.releaseElement;
    } else {
    window.onmousedown = this.grabElement;
    window.onmousemove = this.dragElement;
    window.onmouseup = this.releaseElement;
    }
}
DragManager.prototype.update = function() {
    if (!window.Element) {
    document.registeredElements = this.registeredElements;
    } else {
    window.registeredElements = this.registeredElements;
    }
}   
//]]></script>
</head>
<body>

<!-- Normal page content. -->

<div id="boxA" class="box" style="left:100px;top:150px;">
   
    <table style="width:100%;height:100%;" cellspacing="0" cellpadding="0" border="1">
        <tr>
            <td><div id="boxA_pull">Drag Box A</div></td>
        </tr>
        <tr>
            <td>This is just at text for A</td>
        </tr>
        <tr>
            <td align="right">Traek her >></td>
        </tr>
    </table>


</div>

<div id="boxB" class="box" style="left:300px;top:150px;">
   
    <table style="width:100%;height:100%;" cellspacing="0" cellpadding="0" border="1">
        <tr>
            <td><div id="boxB_pull">Drag Box A</div></td>
        </tr>
        <tr>
            <td>This is just at text for A</td>
        </tr>
        <tr>
            <td align="right">Traek her >></td>
        </tr>
    </table>


</div>


</body>
</html>
Avatar billede lizardine Nybegynder
25. juni 2003 - 11:45 #2
Dette her kan jeg bestemt arbejde med. Tusind tak.

Gider du at komme med en besvarelse ;-)
Avatar billede =maddog= Nybegynder
25. juni 2003 - 13:41 #3
Selv klart :D
Avatar billede lizardine Nybegynder
25. juni 2003 - 14:11 #4
Kanon - mange tak :-)
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