Avatar billede Keld Nielsen Professor
04. oktober 2007 - 18:11 Der er 32 kommentarer og
2 løsninger

Visning af personer ved klik på gruppebillede

Jeg har et gruppebillede med en del personer, som når man klikker på en person skal der komme et nyt billede frem, samt oplysninger om personen.

Umiddelbart havde jeg tænkt mig at lave det med nogle hotspot på gruppebilledet, og lade den henvise til detaljerne med en innerHTML.

...men er der nogen der har en mere "smart" metode, evt. hvor personens navn fremkommer ved mouseover.

Gode idé er mere end velkommen.
Avatar billede keysersoze Ekspert
04. oktober 2007 - 18:17 #1
show/hide layer - lav en div for hver person og vis/skjul alt afhængig af hvem der klikkes på. Undgå i hvert fald innerHTML.
Avatar billede w13 Novice
04. oktober 2007 - 18:40 #2
Hvis du lægger en title="Navn Efternavn" på dine hotspots, så skulle det med navn ved mouseover vist være løst. Har dog ikke selv prøvet.

Og en show/hide-layer-funktion kunne se sådan ud:

<script type="text/JavaScript">
function ToggleShow(elm){
elm=document.getElementById(elm);
elm.style.display=elm.style.display=="none"?"inline":"none";
}
</script>

<div id="person1">Info om person1</div>

<div id="person2">Info om person2</div>

Så kan du kalde visning/"skjulning" af en person med eks. onclick="ToggeShow('person1')"
Avatar billede w13 Novice
04. oktober 2007 - 18:59 #3
Hov, glemte lige, at info om personer først skal være skjult:
---------------------------------------
<div id="person1" style="display:none">Info om person1</div>

<div id="person2" style="display:none">>Info om person2</div>
---------------------------------------
Men i ovenstående tilfælde vil der kunne være flere personer "åbne" ad gangen.

I nedenstående kan der kun ses én person ad gangen, og koden skulle gerne være fuldstændig valid, til forskel fra hvis du nu f.eks. havde brugt innerHTML, der er alt andet end gyldig.
---------------------------------------
<script type="text/JavaScript">
function ShowDiv(elm){
document.getElementById("person"}.removeChild(document.getElementById("person").firstChild);
document.getElementById("person").appendChild(document.getElementById(elm).cloneNode(true));
</script>

<div id="person1" style="display:none">Person 1</div>
<div id="person2" style="display:none">Person 2</div>

<div id="person"></div>
---------------------------------------
Funktionen kaldes så f.eks. med ShowDiv('person2')
Avatar billede jhe-ting Nybegynder
04. oktober 2007 - 19:02 #4
Jeg har for nogen tid siden eksperimenteret med et gruppebillede, hvor jeg prøvede dette som måske kan inspirere:


<!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=windows-1252">
<title>Familietræf - Påsken 2007</title>
<script type="text/javascript">

function showDbg(strTxt){
    var dst = document.getElementById('dbgDisp');
    dst.replaceChild(document.createTextNode(strTxt), dst.firstChild);
    dst.style.display='block';
}
function showInfo(idx){
    var dst = document.getElementById('infoDisp');
    dst.replaceChild(document.createTextNode("Info "+idx), dst.firstChild);
    dst.style.display='block';
}
function hideInfo(){
    document.getElementById('infoDisp').style.display='none';
}
function editInfo(idx){
    alert('edit'+idx)
}
var hh,ww,trkImg;
function overImg(evt){
    evt = evt || event;
    var trkStyle = trkImg.style;
  showDbg(evt.clientX+','+evt.clientY+' - '+trkStyle+','+typeof trkStyle.height);
    trkImg.scrollLeft = evt.clientX  * ww - parseInt(trkStyle.width)/2;
    trkImg.scrollTop  = evt.clientY  * hh - parseInt(trkStyle.height)/2;
    //trkStyle.left = (evt.clientX  - parseInt(trkStyle.width)/2)+'px';
    //trkStyle.top  = (evt.clientY  - parseInt(trkStyle.height)/2)+'px';
   
}
window.onload = function(){
    var mainImg = document.getElementById('mainImg');
    var inset = document.getElementById('inset');
    trkImg = document.getElementById('trkImg');
    hh = inset.height/mainImg.height;
    ww = inset.width/mainImg.width;
    mainImg.onmousemove=overImg;
    trkImg.onmousemove=overImg;
    var areas = document.getElementsByTagName('area');
    for (var ii=0, nn=areas.length; ii<nn; ii++) {
        areas[ii].onmousemove=overImg;
        var showII=new Function('','showInfo('+ii+')');
        areas[ii].onmouseover=showII;
        areas[ii].onfocus=showII;
        areas[ii].onmouseout=hideInfo;
        areas[ii].onclick=new Function('','editInfo('+ii+')');
    }
}
</script>
<style type='text/css'>
#mainImg {
position: absolute; top: 0px; left: 0px; z-index: 0
}
#trkImg{
position:absolute; z-index:1; overflow:hidden; border:3px solid #CCCBC8
}
#infoDisp{
position:absolute; display:none; color:#FFFFFF; background-color:#000000; z-index:2
}
#dbgDisp{
position:absolute; top:680px; left:400px; z-index:3
}
</style>
</head>

<body>

<div><map name="FPMap0">
<area shape="circle" coords="160, 367, 35" href='#' alt='Klik = Edit'>
<area shape="circle" coords="360, 367, 35" href='#' alt='Klik = Edit'>
</map><img id='mainImg' border="0" src="påsken%202007%20+%20Familietræf%20040.jpg" width="1024" height="680" usemap="#FPMap0" alt='Klik = Edit'></div>
<div id='trkImg' style="top:494px; left:0px; height:180px; width:180px;"><img
id='inset' src="påsken%202007%20+%20Familietræf%20040.jpg" width="3008" height="2000" alt='Klik = Edit'></div>
<div id='infoDisp' style='top:654px'>info</div>
<div id='dbgDisp'>debug</div>
</body>

</html>
Avatar billede w13 Novice
04. oktober 2007 - 19:05 #5
fotograf>> hvis du viser mig din hotspot-kode, kan jeg fikse det for dig.
Avatar billede w13 Novice
04. oktober 2007 - 19:13 #6
Et forkert tegn havde lige sneget sig med i den sidste funktion, jeg skrev:

<script type="text/JavaScript">
function ShowDiv(elm){
document.getElementById("person").removeChild(document.getElementById("person").firstChild);
document.getElementById("person").appendChild(document.getElementById(elm).cloneNode(true))
}
</script>
Avatar billede w13 Novice
04. oktober 2007 - 19:18 #7
Nu er min kode vist snart 2.0 :)

Glemte at tjekke, om der er nogle Childnodes, før vi sletter det første.
----------------------------------------------
<script type="text/JavaScript">
function ShowDiv(elm){
if(document.getElementById("person").hasChildNodes)document.getElementById("person").removeChild(document.getElementById("person").firstChild);
document.getElementById("person").appendChild(document.getElementById(elm).cloneNode(true))
}
</script>
Avatar billede Keld Nielsen Professor
04. oktober 2007 - 20:00 #8
Min hotspot kode ...for eén person ser sådan ud:
<img src="images/team.jpg" border="0" usemap="#Map" />
<map name="Map" id="Map">
  <area shape="poly" coords="169,114,170,112,170,92,176,87,188,77,197,77,206,80,222,89,225,97,226,109,226,123,223,131,217,137,202,145,188,149,176,149,171,145,165,132,165,126,164,117" href="personale/helle.html" />
</map>
Avatar billede w13 Novice
04. oktober 2007 - 21:14 #9
Prøv:

<img src="images/team.jpg" border="0" usemap="#Map">
<map name="Map" id="Map">
  <area shape="poly" coords="169,114,170,112,170,92,176,87,188,77,197,77,206,80,222,89,225,97,226,109,226,123,223,131,217,137,202,145,188,149,176,149,171,145,165,132,165,126,164,117" href="java script:void(0)" onclick="ShowDiv('helle')" title="Helle">
</map>

<script type="text/JavaScript">
function ShowDiv(elm){
if(document.getElementById("person").hasChildNodes)document.getElementById("person").removeChild(document.getElementById("person").firstChild);
document.getElementById("person").appendChild(document.getElementById(elm).cloneNode(true))
}
</script>

<div id="helle" style="display:none">Person 1</div>
<div id="person2" style="display:none">Person 2</div>

<div id="person"></div>
Avatar billede Keld Nielsen Professor
04. oktober 2007 - 21:44 #10
Jeg kan ikke helt få det til at "spille", prøv at se her: http://www.prolight.dk/lund_vinding/ ...under "team"
Avatar billede w13 Novice
04. oktober 2007 - 22:51 #11
Prøv at rette javascript til:

<script type="text/JavaScript">
function ShowDiv(elm){
if(document.getElementById("person").hasChildNodes){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
document.getElementById("person").appendChild(document.getElementById(elm).cloneNode(true))
}
</script>
Avatar billede Keld Nielsen Professor
05. oktober 2007 - 07:11 #12
Det har jeg så gjort - og lagt resultatet ud - men jeg kan stadig ikke se nogen form for tekst når jeg klikker på personen.  ;-(
Avatar billede jhe-ting Nybegynder
05. oktober 2007 - 12:17 #13
Din 'cloneNode' kloner en usynlig div. Husk at gøre kopien synlig:

function ShowDiv(elm){
  if(document.getElementById("person").hasChildNodes)
    {document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
  var clone = document.getElementById(elm).cloneNode(true);
  clone.style.display='';  //  !!!  Synlig
  document.getElementById("person").appendChild(clone);

}
Avatar billede w13 Novice
05. oktober 2007 - 14:02 #14
Det er selvfølgelig rigtigt, ja.

function ShowDiv(elm){
  if(document.getElementById("person").hasChildNodes){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
  var clone=document.getElementById(elm).cloneNode(true);
  clone.style.display="inline";
  document.getElementById("person").appendChild(clone);
}
Avatar billede Keld Nielsen Professor
05. oktober 2007 - 14:31 #15
Der er desværre stadig ingen visning ....har det noget at gøre med at jeg viser det i en anden DIV ???

se her: http://www.prolight.dk/lund_vinding/team.html
Avatar billede w13 Novice
05. oktober 2007 - 23:03 #16
Nå ja, hasChildNodes skal være hasChildNodes() altså med parentes efter. =)
Avatar billede Keld Nielsen Professor
06. oktober 2007 - 07:47 #17
Stadig intet liv - har lagt rettelsen ud på sitet.
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 16:12 #18
Må jeg have lov at anbefale en syntaksforstående editor f.eks. Notepad++, der viser fremhævet syntaks.

Der mangler en parates på l. 10 hvor der burde stå:

if(document.getElementById("person").hasChildNodes()){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
Avatar billede jhe-ting Nybegynder
06. oktober 2007 - 16:13 #19
PS: Har du set på mit eksempel (04/10-2007 19:02:28)?
Avatar billede Keld Nielsen Professor
06. oktober 2007 - 20:36 #20
Hej 'jhe-ting' ja, jeg har set dit interresante eksempel - men det er desværre ikke hvad jeg har brug for.

Det er som jeg har beskrevet - et gruppebillede, der ved klik på en enkelt person, viser et enkeltportræt af vedkommende ...og nogle oplysninger om personen.

Din fremhævelse af syntax-fejlen gav desværre heller ikke resultat.
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 15:47 #21
Fejlen er der stadig... 

missing ) after condition    team.html line 10

if(document.getElementById("person").hasChildNodes(){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
11 var clone=document.getElementById(elm).cloneNode(true);

ret til

if(document.getElementById("person").hasChildNodes()){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
11 var clone=document.getElementById(elm).cloneNode(true);
Avatar billede w13 Novice
07. oktober 2007 - 15:56 #22
Ja, koden hedder hasChildNodes(). Derfor skal det stå sådan, men det det er inde i en if-betingelses-parentes, skal denne også lukkes bagefter. Derfor de to ")"
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 15:58 #23
Desuden mangler der en > efter  <p i

<div id="helle" style="display:none"><p<Person 1</p></div>

ret til

<div id="helle" style="display:none"><p><Person 1</p></div>
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 15:59 #24
Det er altid vigtigt at kontrollere syntaksen. En hver fejl kan give uventede resultater.
;)
Avatar billede w13 Novice
07. oktober 2007 - 16:00 #25
fotograf>> Ja, hvis du ikke skriver koderne præcis som jeg gør, så finder vi ikke ud af, om det kan virke :) Har dog lige testet noget lignende her på min computer, og det ser fint ud.
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 16:00 #26
øh ... ret til

<div id="helle" style="display:none"><p>Person 1</p></div>

hastværk er lastværk  :P
Avatar billede Keld Nielsen Professor
07. oktober 2007 - 16:10 #27
Hej ....alletiders I stadig er med!

Jeg mener faktisk også jeg skriver det helt som I skriver - jeg klipper klistre simpelthen.

Jeg har lagt seneste vers. ud på nettet.
Avatar billede Keld Nielsen Professor
07. oktober 2007 - 16:39 #28
Jeg har prøvet at trææke det hel udfra det miljø, som det skal være i, altså uden forstyrrende div og css ...osv osv, desværre samme resultat:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/JavaScript">
function ShowDiv(elm){
if(document.getElementById("person").hasChildNodes()){document.getElementById("person").removeChild(document.getElementById("person").firstChild)}
var clone=document.getElementById(elm).cloneNode(true);
}
</script>

</head>

<body>
<img src="images/team.jpg" border="0" usemap="#Map">
<map name="Map" id="Map">
  <area shape="poly" coords="169,114,170,112,170,92,176,87,188,77,197,77,206,80,222,89,225,97,226,109,226,123,223,131,217,137,202,145,188,149,176,149,171,145,165,132,165,126,164,117" href="java script:void(0)" onclick="ShowDiv('helle')" title="Helle">
</map>

<div id="helle" style="display:none">Person 1</div>
<div id="person2" style="display:none">Person 2</div>

<div id="person"></div>
</body>
</html>
Avatar billede Keld Nielsen Professor
07. oktober 2007 - 17:16 #29
Pinligt .... glemte:

  clone.style.display="inline";
  document.getElementById("person").appendChild(clone);

Nu virker det !!!

Smid et svar
Avatar billede w13 Novice
07. oktober 2007 - 19:06 #30
Okidoke! :)
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 20:43 #31
Hvis du synes jeg også har hjulpet, så er her et svar også. :)
Avatar billede Keld Nielsen Professor
07. oktober 2007 - 21:36 #33
Tak for hjælpen!

...og ja, opgaven er absolut ikke afleveret endnu!
Avatar billede jhe-ting Nybegynder
07. oktober 2007 - 21:55 #34
Tak for points, og held og lykke...  ;)
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