Avatar billede thb Nybegynder
26. maj 2005 - 14:10 Der er 3 kommentarer og
1 løsning

Crop image

Hej alle,

jeg har før herinde set et link til en side hvor man kunne trykke på et billede og så trække en box hen over billedet, og så skulle kunne trykke "ok" og så fik man kordinaterne som boks havde..

Jeg kan ikke finde siden nu, kender i den...
Men at det var en her fra exp der har lavet det..

Det er også okay hvis I kender en anden side hvor man kan få koden... det skal cross browser/os..

Thomas
Avatar billede skovenborg Nybegynder
26. maj 2005 - 19:10 #1
Jeg ved ikke umiddelbart hvor du kan finde sådan et script, så jeg har lavet et der gør nogenlunde det samme:
<script type="text/javascript">
  var startPos = {x:0,y:0}
  var endPos = {x:0,y:0}
  var cropElmId = "cropDiv";
  var cropActive = false;

  function getPos(elm) {
    for(var zx=zy=0;elm!=null;zx+=elm.offsetLeft,zy+=elm.offsetTop,elm=elm.offsetParent);
    return {x:zx,y:zy}
  }
  function startCrop(e,elmId) {
      e = (!e) ? event : e;
      startPos.x = endPos.x = (typeof e.clientX == "number") ? e.clientX : e.pageX;
      startPos.y = endPos.y = (typeof e.clientY == "number") ? e.clientY : e.pageY;
      placeCropElm();
      cropActive = true;
      writePosition(elmId);
  }

  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);
      }
  }
 
  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(elmId) {
      cropActive = false;
      writePosition(elmId);
  }
 
  function writePosition(ID) {
      frm = document.form1;
      elmPos = getPos(document.getElementById(ID));
      frm.x1.value = Math.min(startPos.x,endPos.x)-elmPos.x;
      frm.y1.value = Math.min(startPos.y,endPos.y)-elmPos.x;
      frm.x2.value = Math.max(startPos.x,endPos.x)-elmPos.y;
      frm.y2.value = Math.max(startPos.y,endPos.y)-elmPos.y;
  }

</script>
</head>
<body>
<div id="cropDiv" style="border:1px solid #000;background-color:#ddf;opacity:0.5;filter:alpha(opacity=50);;position:absolute;left:0px;top:0px" onclick="if (cropActive) {endCrop(this.id);} else {startCrop(event,'billede');}"  onmousemove="moveCrop(event,'billede');"></div>
<img src="billede.png" id="billede" style="width:200px;height:300px;" onclick="if (cropActive) {endCrop(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">
</form>
</body>
</html>

Har ikke haft tid til at teste det alt for godt igennem, og der mangler også lidt endnu, men du kan jo hygge dig med det så længe :-)
Avatar billede thb Nybegynder
27. maj 2005 - 10:14 #2
Hey skovenborg, jeg kigger lige på det nu og vender tilbage, men du kan vel smide et svar i mellem tiden.

Thomas
Avatar billede thb Nybegynder
27. maj 2005 - 10:26 #3
Hey, nu har jeg testet det og det er jo helt perfekt...

Tjekket på:

Win: IE, Firefox, Opera
Mac: Safari, IEmac, Firefox
Bliver testet på linux senere, men regner ikke med nogle problemer der... :)

Der er kun en lille bug i Win(Opera) og Mac(IEmac) for der bliver div'et ikke gennemsigtigt... Lidt ærgeligt, men hvis det ikke er noget der kan rettes så er det okay... Ikke lige de mest brugte browsere.. :)

Smid lige et svar, jeg ligger lidt ekstra point på, for det var bare et perfekt svar..

Thomas
Avatar billede skovenborg Nybegynder
27. maj 2005 - 14:38 #4
grunden til de er gennemsigtige i firefox og IE er pga deres understøttelse af henholdsvis opacity (Moz) og filterne (IE). Opera understøtter nok ikke umiddelbart disse properties - evt. kunne det være opacity vil senere blive understøttet da det bliver et led i den nye CSS3 standard.

Evt. kan du bruge en halvgennemsigtig gif som baggrundsbillede i stedet - så vil det højst sandsynligt også virke i Opera og IEmac. Hvordan man nu lige laver sådan et gif-billede, kan jeg ikke lige huske - men måske du kan finde noget herinde :-)
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