Avatar billede javanic Nybegynder
07. juni 2006 - 16:49 Der er 3 kommentarer og
1 løsning

Div Resize + Drag'n drop

Hej,


Jeg er i gang med at lave et script til online billederedigering, og har pt. blot lavet så det er muligt at trække et layer over billedet. Koordinaterne sendes herefter videre til min backend kode, der generere et nyt billede (dvs. pt. crop'es det kun).

Dvs. at jeg mangler funktionaliteter til at resize og drag'e mit "crop-layer" rundt på billedet.

Er der en enkelt, der kan hjælpe mig videre :-) Det er vigtigt, at det virker i de mest gængse browsere.

koden kommer her:

<html>
<head>
    <meta http-equiv="imagetoolbar" content="false" />
   
<script type="text/javascript">

/* **************************************
*            GLOBAL PROPERTIES:            *
****************************************/
//    definerer start og slut koordinatet i vinduets koordinatsystem:
var startPos    = {x:0,y:0}
var endPos        = {x:0,y:0}

var cropElmId    = "cropDiv";
var cropActive    = false;

//    definerer afstanden fra billedets nulpunkt (billedets øverste venstre hjørne)
//    til vinduets nulpunkt (0,0):
var fromleft    = 0;
var fromtop        = 0;

    function startCrop(e,elmId)
    {
        e = (!e) ? event : e;   

        //    start-koordinat for punktet (0,0) på billedet:
        fromleft = document.getElementById( "billede" ).offsetLeft;
        fromtop    = document.getElementById( "billede" ).offsetTop;
       
        //    start-koordinat på crop:
        startPos.x = endPos.x = (typeof e.clientX == "number") ? e.clientX : e.pageX;
        startPos.y = endPos.y = (typeof e.clientY == "number") ? e.clientY : e.pageY;
           
        //    sæt flag:
        cropActive = true;
        placeCropElm();
    }

   
    function moveCrop(e,elmId)
    {
        if (cropActive)
        {
            e = (!e) ? event : e;
            endPos.x = (typeof e.clientX == "number") ? e.clientX : e.pageX;
            endPos.y = (typeof e.clientY == "number") ? e.clientY : e.pageY;
           
            placeCropElm();
            writePosition(elmId) ; //opdater værdier
        }
    }
 
    function placeCropElm()
    {
        cropElm = document.getElementById(cropElmId).style;

        cropElm.left    = Math.min( startPos.x, endPos.x)+"px";
        cropElm.top        = Math.min( startPos.y,endPos.y) +"px";
        cropElm.width    = Math.max( endPos.x-startPos.x, startPos.x-endPos.x)+"px";
        cropElm.height    = Math.max( endPos.y-startPos.y, startPos.y-endPos.y)+"px";
    }

   
   
    function endCrop(e, elmId)
    {
        cropActive = false;
       
        //    slut koordinat på crop:
        endPos.x = (typeof e.clientX == "number") ? e.clientX : e.pageX;
        endPos.y = (typeof e.clientY == "number") ? e.clientY : e.pageY;
        writePosition(elmId);
       
    }
   

    function writePosition(ID)
    {
        frm = document.form1;

        frm.x1.value = Math.min(startPos.x,endPos.x) - fromleft;
        frm.y1.value = Math.min(startPos.y,endPos.y) - fromtop;
        frm.x2.value = Math.max(startPos.x,endPos.x) - fromleft;
        frm.y2.value = Math.max(startPos.y,endPos.y) - fromtop;
       
       
    }   
   
   
function MakeRegion (regionObject, imageObject)
{
   
    if ( ( regionObject == null ) || ( imageObject == null ) )
    {
        alert ('MakeRegion: argument "regionObject" OR "imageObject" not an object');
        return;
    }
   
    if ( endPos.x < 0 )
        endPos.x = 0;

    if ( endPos.y < 0 )
        endPos.y = 0;
       
       

    var tooWide        = ( (startPos.x + endPos.x) > imageObject.width );
    var tooTall        = ( (startPos.y + endPos.y) > imageObject.height );

    window.status = "startPos.x= "+startPos.x + ", endPos.x= +" +endPos.x + ", imageObject.width="+imageObject.width;
   
    //    check if selection exceeds the aspect boundaries:
    if ( ( aspectLock == true ) || ( alwaysKeepAspect == true ) )
    {
        if ( tooWide == true )
        {
            endPos.x    = imageObject.width - startPos.x;
            endPos.y    = Math.round (endPos.x / aspectRatio);

            tooTall = ( (startPos.y + endPos.y) > imageObject.height);
        }

        if ( tooTall == true )
        {
                endPos.y = imageObject.height - startPos.y;
                endPos.x = Math.round ( endPos.y * aspectRatio );

                tooWide        = ( ( startPos.x + endPos.x ) > imageObject.width );

                if ( tooWide == true )
                {
                    endPos.x = imageObject.width - startPos.x;
                    endPos.y = Math.round ( endPos.x / aspectRatio );
                }
        }
    }
    else
    {
        if ( tooWide == true )
            endPos.x = imageObject.width - startPos.x;

        if ( tooTall == true )
            endPos.y = imageObject.height - startPos.y;
    }
   
}//()
</script>
</head>

<body>

<div id="cropDiv" style="border:1px solid #000000;
                        background-color:#333333;
                        filter:alpha(opacity=50);
                        position:absolute;"
                        onclick="if (cropActive) { endCrop(event,this.id); } else {startCrop(event,'billede');}" 
                        onmousemove="moveCrop(event,'billede');">
</div>
    <br />
<img src="pussycat_nicole2.jpg" id="billede" style="cursor:crosshair;" onclick="if (cropActive) {endCrop(event, this.id);} else {startCrop(event,this.id);}" onmousemove="moveCrop(event,this.id);">

<form name="form1">
  x1: <input type="text" name="x1">
  -
  y1: <input type="text" name="y1">
  <br>
  x2: <input type="text" name="x2">
  -
  y2: <input type="text" name="y2">
  <br /> 
  </div>
</form>
</body>
</html>
Avatar billede javanic Nybegynder
07. juni 2006 - 17:54 #1
slet ingen der kan guide?? :)
Avatar billede javanic Nybegynder
07. juni 2006 - 21:41 #2
Så sætter vi den da op til 200 point :)
Avatar billede javanic Nybegynder
08. juni 2006 - 16:37 #3
prøver at lege lidt videre med det selv.

men de 200 point gælder stadig
Avatar billede javanic Nybegynder
08. juni 2006 - 17:14 #4
lukker
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