Avatar billede texas2 Nybegynder
05. oktober 2001 - 18:40 Der er 9 kommentarer og
1 løsning

Vise bilde ved givet x,y koordinat

Dette spørgsmål har sammeheng med http://www.eksperten.dk/spm/117612

Jeg har følgende kode, som giver x,y koordinater til punktet hvor der klikkes med musen :

<script>
function VisKoordinat(){
    Koordinat.innerText = event.offsetX + \"x\" + event.offsetY
}
</script>

<img src=\"kort.gif\" onclick=\"VisKoordinat(this)\">
Koordinat i forhold til billedet: <span id=Koordinat></span>

Hvordan laver jeg en funktion som viser et biled (et lille ikon), oven på det eksisterende biled, med plasseringen x,y?

Plaseringen skal være relativ til biledets plasering. Dvs.hvis jeg kalder funktionen \"placepic(0,0)\" skal ikonet plaseres i øverste venstre hjørne på \"hovedbiledet\", uansett hvor dette er plaseret på skærmen.
Avatar billede jakoba Nybegynder
05. oktober 2001 - 18:48 #1

<img src=\"filnavn.gif\" name=\'olsen\' style=\"position.absolute;top:0;height:0\">

du placere så billedet med:

<script language=\'javascript\'>

function placePic ( x, y ) {
    var pstil = document.all[\'olsen\'].style;
    pstil.top = y;
    pstil.left = x;
}; //end placePic ( number, number )

</script>

så kan du placere dit billede med fx:

    placePic( 300, 400 );

mvh JakobA
Avatar billede jakoba Nybegynder
05. oktober 2001 - 18:48 #2
PS: decideret \'kun til IE\' kode.
Avatar billede texas2 Nybegynder
05. oktober 2001 - 19:26 #3
Muligt at jeg spørger dumt, men : <img src=\"filnavn.gif\" name=\'olsen\' style=\"position.absolute;top:0;height:0\"> er koden for ikonet, og ikke bagrundsbiledet?

Hvordan kalder jeg placePic(x,y)? - Jeg har prøvet lidt forskelligt, men kan ikke umidelbart få det til at virke.
Avatar billede jakoba Nybegynder
05. oktober 2001 - 19:50 #4
Ja det er koden for det ikon der skal flyttes rundt med.

du kan evt komme kaldet ind i din funktion VisKoordinat:

<script>
function VisKoordinat(){
    Koordinat.innerText = event.offsetX + \"x\" + event.offsetY;
    placePic( event.offsetX, event.offsetY );
}
</script>

mvh JakobA
Avatar billede olebole Juniormester
06. oktober 2001 - 04:04 #5
<ole>
Med al respekt...jeg tror spørgsmålet er blevet misforstået. Både dette og det, der ledte op til, hvor texas2 lærte, hvordan man fandt klik koordinaterne på et billede.
Jeg tror texas2 har et billede \'flydende\' på sin side - f.eks. i en centreret tabel. Nu vil han gerne klikke på billedet og få sat et ikon i øverste venstre hjørne af billedet - uanset hvor det befinder sig.

texas2 >> Du har ikke skrevet det, men jeg går udfra, ikonet skal være klistret fast på billedet, hvis brugeren resizer efter det er sat på. Hvis jeg har ret, kan du gøre sådan:

<html>
<head>
<script language=\"javascript\">
var ns4 = (document.layers)? true : false;
var ie4 = (document.all)? true : false;
var clicked = false;
function getX(obj) {
    if (obj == document.body) return obj.offsetLeft
    else return obj.offsetLeft +getX(obj.offsetParent);
}
function getY(obj) {
    if (obj == document.body) return obj.offsetTop
    else return obj.offsetTop +getY(obj.offsetParent);
}
function setIcon() {
    if (!clicked) return false;
    var picX = (ns4)? document.images[\"posPic\"].x : getX(document.images[\"posPic\"]);
    var picY = (ns4)? document.images[\"posPic\"].y : getY(document.images[\"posPic\"]);
    obj = (ns4)? document.layers.ib : (ie4)? document.all.ib : document.getElementById(\"ib\");
    styleObj = (ns4)? obj : obj.style;
    styleObj.left = picX;
    styleObj.top = picY;
    styleObj.visibility = \"visible\";
}
window.onresize = setIcon;
</script>
</head>
<body>

<div id=\"ib\" style=\"position:absolute;width:16px;height:16px;visibility:hidden;z-index:1;\">
    <img src=\"ikon.gif\" width=\"16\" height=\"16\">
</div>

<center>
<table cellpadding=\"0\" cellspacing=\"0\">
  <tr>
    <td><a href=\"java script:clicked=true;setIcon();void(0);\"><img src=\"din.jpg\" width=\"200\" height=\"100\" name=\"posPic\" border=\"0\"></a></td>
  </tr>
</table>
</center>

</body>
</html>

Det skulle gerne være X-browser i vers4+. Jakoba, du må meget gerne checke foretage korrektioner - jeg har ikke en NS4 inde for tiden  :)
/mvh
</bole>
Avatar billede olebole Juniormester
06. oktober 2001 - 04:12 #6
Der opstår en vis enerti, når man først har taget afsæt ud ad en forkert tangent og man får snakket lidt forbi hinanden - og spørgsmålet ydermere ikke er helt klart formuleret. Så hjælper det tit, der kommer en med friske øjne og får læst siden igennem.
Denne gang tror jeg, det var det mig, Jakob  ;o)
/mvh
Avatar billede jakoba Nybegynder
06. oktober 2001 - 04:23 #7
det tror jeg også :-))
allenfals var mit ikke spor crossbrowser.

mvh JakobA
Avatar billede olebole Juniormester
06. oktober 2001 - 04:41 #8
Nu kom jeg lige tilbage.....og blev i tvivl  =oD
Hvis du ønsker, at ikonet skal sættes der, hvor brugeren klikker på billedet - og det samtidig skal kunne være \'flydende\' på siden, kan du gøre på denne måde:

<html>
<head>
<script language=\"javascript\">
var ie4 = (document.all)? true : false;
var clicked = false;
var initX = false;
var initY = false;
function getX(obj) {
    if (obj == document.body) return obj.offsetLeft
    else return obj.offsetLeft +getX(obj.offsetParent);
}
function getY(obj) {
    if (obj == document.body) return obj.offsetTop
    else return obj.offsetTop +getY(obj.offsetParent);
}
function setIcon() {
    if (!clicked) return false;
    if (event.srcElement) {
        initX = event.offsetX;
        initY = event.offsetY;
    }
    var picX = getX(document.images.clickPic);
    var picY = getY(document.images.clickPic);
    styleObj = (ie4)? document.all.ib.style : document.getElementById(\"ib\").style;
    styleObj.left = picX+initX;
    styleObj.top = picY+initY;
    styleObj.visibility = \"visible\";
}
window.onresize = setIcon;
</script>
</head>
<body bgcolor=\"#FFFFFF\">

<div id=\"ib\" style=\"position:absolute;width:16px;height:16px;visibility:hidden;z-index:1;\">
    <img src=\"ikon.gif\" width=\"16\" height=\"16\">
</div>

<center>
<table cellpadding=\"0\" cellspacing=\"0\">
  <tr>
    <td><img src=\"din.jpg\" width=\"200\" height=\"100\" name=\"clickPic\" onclick=\"clicked=true;setIcon(this);\"></td>
  </tr>
</table>
</center>

</body>
</html>

Men her tør jeg ikke bevæge mig ud i NS4 uden en browser at teste i, så her er alt NS4 kode slettet  =o)
/mvh
Avatar billede texas2 Nybegynder
06. oktober 2001 - 10:45 #9
Mange tak for jeres gode svar. Jeg forsøger at lære lidt JavaScript, men er ikke kommet så langt endnu, så beklager hvis jeg spørger dumt.

oleboles sidste kodeeksempel var egentlig det jeg spurgte efter, men jeg klarer ikke helt at gennemskue koden. Jeg har derfor et par tillegsspørgsmål :

1) Hvordan plasserer jeg ikonet hvis koordinaterne er kendt?. Altså et funktionskald, som plasserer biledet, uden at der klikkes med musen

2) Hvordan får jeg plaseret flere ikoner på biledet samtidig?.

Det jeg ønsker er at hive en række koordinater ud af en database, og få vist dem som ikoner på biledet. Selve udhentningen fra DBen kan enkelt laves i ASP, så det er ikke noget problem.
Avatar billede jakoba Nybegynder
08. oktober 2001 - 00:15 #10
1)  Det er oleboles funktion  setIcon()  der placerer ikonet. Nedenfor har jeg lavet den om så den får X og Y som parametre istedet for at hente dem i Click-eventen:

function setIcon( X, Y ) {
    var picX = getX(document.images.clickPic);
    var picY = getY(document.images.clickPic);
            // picX, picY er clickPics position på siden

    styleObj = (ie4)? document.all.ib.style : document.getElementById(\"ib\").style;
            // styleObj er det objekt vi ønsker at placere (ved navn \'ib\')

    styleObj.left = picX +X;
    styleObj.top = picY +Y;
            // placererer \'ib\'  X,Y inde på \'clickPic\'

    styleObj.visibility = \"visible\";  // vær sikker på \'ib\' er synlig
}

// et kald setIcon( 10, 10 ) vil så placere \'ib\' 10 pixel under og 10 tilvenstre for \'clickPic\'a øverste venstre hjørne.

function test ()
    var y=10
    var x=10;
    while ( x>=0 ) {
        setIcon( x, y );      // vis billedet der
        x = parseInt( \"0\"+prompt( \"hvorlangt tilvenstre (X)?\" );
        y = parseInt( \"0\"+prompt( \"hvorlangt fra toppen (Y)?\" );
    }
}; //end test ()

test(); // indtast negativ X når du ikke gider mere.

// den slags testfunktioner er grumme oplysende at lege med.

2) i funktionen  setIcon  går vi ud fra ikon-objektet hedder \'ib\'. Vi skal blot gøre ikonnavnet til en parameter til funktionen.

function setIcon( X, Y, ikonNavn ) {
    var picX = getX(document.images.clickPic);
    var picY = getY(document.images.clickPic);
          // picX, picY er clickPics position på siden

    styleObj = (ie4)? document.all[ikonNavn].style
                        : document.getElementById(ikonNavn).style;
          // styleObj er det objekt vi ønsker at placere (ved navn ikonNavn)

    styleObj.left = picX +X;
    styleObj.top = picY +Y;
          // placererer \'ib\'  X,Y inde på \'clickPic\'

    styleObj.visibility = \"visible\";  // vær sikker på \'ib\' er synlig
}

// et kald setIcon( 10, 10 ) vil så placere \'ib\' 10 pixel under og 10 tilvenstre for \'clickPic\'a øverste venstre hjørne.

function test ()
    var y=10;
    var x=10;
    var navn = \'ib\'
    while ( x>=0 ) {
        setIcon( x, y, navn );      // vis billedet der
        x = parseInt( \"0\"+prompt( \"hvorlangt tilvenstre (X)?\",\"\" );
        y = parseInt( \"0\"+prompt( \"hvorlangt fra toppen (Y)?\",\"\" );
        navn = prompt( \"hvad hedder ikonet?\",\"\" );
    }
}; //end test ()

test(); // indtast negativ X når du ikke gider mere.

mvh JakobA
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