Avatar billede cybermaster Nybegynder
31. juli 2006 - 16:11 Der er 39 kommentarer og
1 løsning

Hotspots på billedet der ændre størelse

Hej med jer, jeg sidder og undre mig hvordan man laver hotspots, der ændre sig i størrelsen. Har en side med et ilayer, der viser en side med det billedet.

Det ændere sig så det altid er 100% af ilayers højde.

men så rykker alle hotspots felterne sig.
Avatar billede zynzz Praktikant
31. juli 2006 - 16:28 #1
normalt bruger man jo coords til at bestemme hvor hotspots skal være, men hvorfor vil du have så de ændre sig ?
Avatar billede cybermaster Nybegynder
31. juli 2006 - 16:32 #2
Så det passer til billeder der jo også ændre sig i str. det skal fylde 100% af skærmens bredde.
Avatar billede mclemens Nybegynder
31. juli 2006 - 17:58 #3
Virker det her?
class="elwpx99" repræsentere den oprindelige px width på billedet
der blev brugt ved fastsættelsen af de oprindelige coords...





<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var elmap,elimg,elprev;

window.onload=function(){
  elmap=document.getElementById("elmap");
  elimg=document.getElementById("elimg");
  elprev=elimg.className.replace("elwpx","");elmapalign();
  window.onresize=function(){elmapalign();};
}

function elmapalign(){
  elo=elimg.offsetWidth;
  areas=elmap.getElementsByTagName("area");
  for(i=0;i<areas.length;i++){
    tmpc=areas[i].coords.replace(" ","");
    tmpc=tmpc.split(",");
    for(i2=0;i2<tmpc.length;i2++){
      tmpc[i2]=Math.round(tmpc[i2]/elprev*elo);
    }tmpc=tmpc.join(",");areas[i].setAttribute("coords",tmpc);
  }elprev=elo;
}
</script>

</head><body>



<img src="http://www.eksperten.dk/img/elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elwpx99">

<map id="elmap" name="elmap">
<area shape="rect" coords="0, 0, 99, 110" href="http://www.eksperten.dk">
</map>


</body></html>
Avatar billede mclemens Nybegynder
31. juli 2006 - 18:00 #4
Jeg bruger ikke selv maps så, hvis det e
helt galt markup mæssigt så undskyld...
Avatar billede cybermaster Nybegynder
31. juli 2006 - 22:56 #5
Kan ikke få det til at virke, Da min skærm som udgagspunkt, er 800px bred, i det vindue, jeg laver hotspotsne i, må det vel være "elwpx800" jeg skriver, men der dukker ikke nogen spot frem.

Eller?
Avatar billede mclemens Nybegynder
31. juli 2006 - 23:08 #6
[ class="elwpx99" repræsentere den oprindelige px width på billedet
der blev brugt ved fastsættelsen af de oprindelige coords... ]

- det er den oprindelige bredde som billedet har i px og ikke din skærm - eksempelvis er ekspertens logo 99px bredt - derfor er cords baseret på ekspertens fulde width og height og elwpx på billedet er sat til 99
Avatar billede mclemens Nybegynder
31. juli 2006 - 23:08 #7
- prøv eksemplet...
Avatar billede cybermaster Nybegynder
31. juli 2006 - 23:49 #8
Ja i dit eksempel, bliver hele billedet til en knap, men hvis vi nu ændre det til:

fx:

<img src="http://www.eksperten.dk/img/elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elwpx99">

<map id="elmap" name="elmap">
<area shape="rect" coords="463, 264, 699, 476" href="http://www.eksperten.dk">
</map>

Hvor kordinaterne ligger midt på billedet, for jeg ingen spot frem overhoved?
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:06 #9
Sidder du stadivæk og arbejder, eller skal vi tage det i morgen istedet?
Avatar billede mclemens Nybegynder
01. august 2006 - 00:07 #10
Nu skal dine koordinater være inden for området af billedet... og billedet er kun 99 x 110 px ... det kan ikke strække sig ud over billedet - beregningen ganger så coordinaterne op så det passer afhængig af hvad str billedet får ... hvis nu billedet havde en width på et højere tal ville det passe...

eks på andre koordinater:

<area shape="rect" coords="10, 10, 90, 90" href="http://www.eksperten.dk">
Avatar billede mclemens Nybegynder
01. august 2006 - 00:10 #11
class="elwpx99" <- definerer width på det oprindelige billede dine koordinater skal passe med det oprindelige billede - ikke et udvidet billede ... ellers skal du udvide billedet fysisk og definere class="elwpx99" til et andet tal så koordinaterne passer ... f.eks.:

<img src="http://www.eksperten.dk/img/elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elwpx800">

- selvfølgelig kun et eksempel men her bilder du så scriptet ind at logoet er 800 px fra starten af og at koordinaterne skal beregnes udfra det ...
Avatar billede mclemens Nybegynder
01. august 2006 - 00:11 #12
[ Sidder du stadivæk og arbejder, eller skal vi tage det i morgen istedet? ]
- Tjoh, hopper snart til køjs men der er da lidt liv i mig endnu :o)
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:13 #13
Nååår nu begynder jeg at fange budskabet ;o)

Jeg skal sætte hotspotsene, når billedet er 99px i breden, og derefter sætte det til 100%...

Smart.

Tester det lige så.
Avatar billede mclemens Nybegynder
01. august 2006 - 00:13 #14
... men jeg ville nok foretrække at definere class="elwpx800" til den width billedet har og så mine koordinater på basis af den width billedet har uden at være udvidet ...
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:15 #15
Kan man entelig gøre så det er efter højden istedet?

Eller er det så det hele der skal ændres?
Avatar billede mclemens Nybegynder
01. august 2006 - 00:15 #16
Yes, nemlig :o)

- Hvis du får problemer kan det tænkes at det hjælper lidt med en rettelse af denne linje i scriptet:

      tmpc[i2]=Math.round(tmpc[i2]/elprev*elo);

til:

      tmpc[i2]=Math.floor(tmpc[i2]/elprev*elo);

... da round kan ske at runde op kan det nemlig ødelægge fremvisningen (tænkte ikke over den del)
Avatar billede mclemens Nybegynder
01. august 2006 - 00:16 #17
[ Kan man entelig gøre så det er efter højden istedet? ]
- Det kan vi godt - kigger lige ...
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:18 #18
Ellers virker det perfekt ;o)
Avatar billede mclemens Nybegynder
01. august 2006 - 00:21 #19
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var elmap,elimg,elprev;

window.onload=function(){
  elmap=document.getElementById("elmap");
  elimg=document.getElementById("elimg");
  if(elimg.className.indexOf("elwpx")!=-1){
    elwcalc=true;
    elprev=elimg.className.replace("elwpx","");
  }else{
    elwcalc=false;
    elprev=elimg.className.replace("elhpx","");
  }
elmapalign();
  window.onresize=function(){elmapalign();};
}

function elmapalign(){
  elo=(elwcalc)?elimg.offsetWidth:elimg.offsetHeight;
  areas=elmap.getElementsByTagName("area");
  for(i=0;i<areas.length;i++){
    tmpc=areas[i].coords.replace(" ","");
    tmpc=tmpc.split(",");
    for(i2=0;i2<tmpc.length;i2++){
      tmpc[i2]=Math.round(tmpc[i2]/elprev*elo);
    }tmpc=tmpc.join(",");areas[i].setAttribute("coords",tmpc);
  }elprev=elo;
}
</script>

</head><body>



<img src="elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elwpx110">
- skift imellem elwpx og elhpx for beregning på width eller height

<map id="elmap" name="elmap">
<area shape="rect" coords="20, 20, 99, 110" href="http://www.eksperten.dk">
</map>


</body></html>
Avatar billede mclemens Nybegynder
01. august 2006 - 00:21 #20
arg, glemte at rette den
      tmpc[i2]=Math.round(tmpc[i2]/elprev*elo);
til:
      tmpc[i2]=Math.floor(tmpc[i2]/elprev*elo);
Avatar billede mclemens Nybegynder
01. august 2006 - 00:24 #21
rettelser lavet:

  if(elimg.className.indexOf("elwpx")!=-1){ //hvis className indeholder elwpx er der tale om en width beregning
    elwcalc=true; // og vi sætter en værdi der betegner at vi beregner på width
    elprev=elimg.className.replace("elwpx",""); // og så laver vi en variabel hvor vi har fjernet teksten
  }else{
    elwcalc=false; // hvis det ikke er width beregning så må det være height beregning (width er false)
    elprev=elimg.className.replace("elhpx",""); // og en variabel med erstatning af teksten
  }



...
  elo=(elwcalc)?elimg.offsetWidth:elimg.offsetHeight; // elo er den nuværende width hvis elwcalc er true : ellers er det den nuværende height...
Avatar billede mclemens Nybegynder
01. august 2006 - 00:25 #22
( husk 01/08-2006 00:21:35) virker den?
Avatar billede mclemens Nybegynder
01. august 2006 - 00:27 #23
... og så skal class="elwpx110" nok rettes til class="elhpx110"
i mit eksempel ... jeg er ikke helt fejlfri ;o)
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:29 #24
tester lige ;o)
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:32 #25
00:24:53 >> Er ikke helt med på hvad der skal byttes ud. :(
Avatar billede mclemens Nybegynder
01. august 2006 - 00:33 #26
Ikke noget der skal bytter ud ... det var
rettelserne jeg havde lavet ... jævnfør:
[ Eller er det så det hele der skal ændres? ]
- eneste rettelse var 01/08-2006 00:21:35
Avatar billede mclemens Nybegynder
01. august 2006 - 00:34 #27
- eneste rettelse som jeg glemte var: 01/08-2006 00:21:35
- samt det skift af class fra elwpx110 til elhpx110
Avatar billede mclemens Nybegynder
01. august 2006 - 00:35 #28
poster lige scriptet med de to rettelser...




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var elmap,elimg,elprev;

window.onload=function(){
  elmap=document.getElementById("elmap");
  elimg=document.getElementById("elimg");
  if(elimg.className.indexOf("elwpx")!=-1){
    elwcalc=true;
    elprev=elimg.className.replace("elwpx","");
  }else{
    elwcalc=false;
    elprev=elimg.className.replace("elhpx","");
  }
elmapalign();
  window.onresize=function(){elmapalign();};
}

function elmapalign(){
  elo=(elwcalc)?elimg.offsetWidth:elimg.offsetHeight;
  areas=elmap.getElementsByTagName("area");
  for(i=0;i<areas.length;i++){
    tmpc=areas[i].coords.replace(" ","");
    tmpc=tmpc.split(",");
    for(i2=0;i2<tmpc.length;i2++){
      tmpc[i2]=Math.floor(tmpc[i2]/elprev*elo);
    }tmpc=tmpc.join(",");areas[i].setAttribute("coords",tmpc);
  }elprev=elo;
}
</script>

</head><body>



<img src="elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elhpx110">
- skift imellem elwpx og elhpx for beregning på width eller height

<map id="elmap" name="elmap">
<area shape="rect" coords="20, 20, 99, 110" href="http://www.eksperten.dk">
</map>


</body></html>
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:36 #29
Oki
Avatar billede mclemens Nybegynder
01. august 2006 - 00:36 #30
Her er lige et svar så :o)
Avatar billede mclemens Nybegynder
01. august 2006 - 00:38 #31
( går nemlig til køjs nu ... det med at være oppe til 2-3 stykker
hver aften og op til hverdage kl 8:30 holder ikke i længden :/ )
- hvis det ikke virker så snakkes vi lige imorgen :o)
Avatar billede mclemens Nybegynder
01. august 2006 - 00:39 #32
... eller har du nogle hurtige fejl inden ?
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:40 #33
Tak for hjælpen :o)
Avatar billede mclemens Nybegynder
01. august 2006 - 00:41 #34
Hov der var lidt ekstra i godteposen :P
Velbekom og tak for pointene :o)
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:41 #35
Ja der er lidt små fejl, men jeg har accepteret svaret, du har virkelig gjort det godt, hopper også selv til køjs nu, men kigger på det i morgen.
Avatar billede mclemens Nybegynder
01. august 2006 - 00:58 #36
Hmmm, har lige pillet lidt - jeg vil kalde det en større fejl ... jeg kigger lige på den imorgen og konverterer nok til lidt object orienteret halløjsa ( er på arbejde imorgen iløbet ... men jeg glemmer dig ikke ;o) - så engang iløbet af imorgen )
Avatar billede cybermaster Nybegynder
01. august 2006 - 00:59 #37
Det lyder bare godt ;o)

Tales i morgen, sov godt :)
Avatar billede mclemens Nybegynder
01. august 2006 - 01:35 #38
Undskyld, men jeg er nødt til at sove lidt bedre - så her er en object fidus ...
... det problem jeg oplevede var at den blev helt upræcis efter lidt resizing ... det bør denne rette op på , alle beskrivelserne kan fjernes ... men jeg regnede med at det var rart nok at vide hvad den gjorde :o)

... YES, så er jeg til køjs :D





<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var elimg; // Variabel der forbinder til elimg
var elwcalc; // Variabel der holder værdien om det skal baseres på width eller height
var elprev; // Variabel til holdning af oprindelig coords width / height basering
var elcoord={}; // Object til at holde links til alle area's og deres oprindelige coords

window.onload=function(){
  if(document.getElementById("elmap")){ // hvis der ikke er et elmap på siden skal scriptet ikke køre
  areas=document.getElementById("elmap").getElementsByTagName("area"); // henter alle area's i elmap
  for(i=0;i<areas.length;i++){

    tmpc=areas[i].coords.replace(" ",""); // fjerner mellemrum i coords
    elcoord[i]={ // object til holdning og senere håndtering af coords
    ob:areas[i],coords:tmpc // Genvej til object og opbevaring af oprindelig coords
    };
  }

  elimg=document.getElementById("elimg"); //
  if(elimg.className.indexOf("elwpx")!=-1){ //hvis className indeholder elwpx er der tale om en width beregning
    elwcalc=true; // og vi sætter en værdi der betegner at vi beregner på width
    elprev=parseInt(elimg.className.replace("elwpx","")); // og så laver vi en variabel hvor vi har fjernet teksten
  }else{
    elwcalc=false; // hvis det ikke er width beregning så må det være height beregning (width er false)
    elprev=parseInt(elimg.className.replace("elhpx","")); // og en variabel med erstatning af teksten
  }

  elmapalign();window.onresize=function(){elmapalign();}; // opstart af koordinat balancering fra start af og indstilling til at det skal kaldes hver gang siden resizes...
  }

}




function elmapalign(){
  elo=(elwcalc)?elimg.offsetWidth:elimg.offsetHeight; // elo er den nuværende width hvis elwcalc er true : ellers er det den nuværende height...

  for(i in elcoord){ // løber igennem alle objecter i objectet elcoord
    tmparr=elcoord[i].coords; // henter oprindelige koordinater til midlertidig array
    tmparr=tmparr.split(","); // opdeler i et array
    for(i2=0;i2<tmparr.length;i2++){ // gennemløber alle koordinater i midlertidig array
      tmparr[i2]=Math.floor(tmparr[i2]/elprev*elo); // tager koordinater og  dividerer med oprindelig width / height basering for at gange med den nuværende width / height afhængig af baseringen
    }tmparr=tmparr.join(","); // samler array til en streng
    elcoord[i].ob.setAttribute("coords",tmparr); // retter koordinater i area'et via objectet elcoord
  }

}

</script>

</head><body>


<img src="elogo.png" alt=""
usemap ="#elmap" style="border:0px;width:100%;" id="elimg" class="elhpx110">
- skift imellem elwpx og elhpx for beregning på width eller height

<map id="elmap" name="elmap">
<area shape="rect" coords="0,0,50,50" href="http://www.eksperten.dk">
</map>


</body></html>
Avatar billede cybermaster Nybegynder
01. august 2006 - 17:23 #39
Det ser bare rigtig godt ud ;o) Har ikke leget med det endnu, men for et par timere senere, hvor der kan testes.

Har du entelig en ide, om hvilke browserer det dur i?

mvh

Henrik
Avatar billede mclemens Nybegynder
01. august 2006 - 18:14 #40
IE 6.0, Firefox 1.0.7 og 1.5.0.4
Opera 9.00 , Netscape 8.1
^ - Melder alle ok (har ikke andre browsere installeret)
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