Avatar billede topperware Nybegynder
03. juli 2005 - 00:24 Der er 18 kommentarer og
1 løsning

Nøjagtig placering af billeder

Som det ses i nedenstående kode har både #img-container & #stortbillede fast bredde og højde (500px * 500px). Grunden til det er at #stortbillede er placeret lige under #img-container og for at opnå følgende effekt: #img-container indeholder 25 små udsnit af hver deres store billede (#stortbillede), og når der klikkes på et af disse små billeder forsvinder de resterende 24 små udsnit i #img-container og det store billede der svarer til netop det udsnit der blev klikket på kommer til syne. Men det er ikke alle 25 store billeder der er 500*500 px, så for at det skal fungere rigtigt, er det meget vigtigt, at de store billeder der kommer til syne under #img-container, er placeret nøjagtigt i midten både vertikalt og horizontalt i forhold til #img-container. Og hvordan gøres det i nedenstående kode?

<html>
<head>
<title>none</title>
<style type="text/css">
html,body{height:100%;border:0;margin:0;padding:0;font-family:verdana;}
#img-container{
position:relative;
width:500px;
height:500px;
padding:0px;
}
#stortbillede{
position:absolute;
top:0px;
left:0px;
width:500px;
height:500px;
z-index:-1;
}
.lilbill{
position:absolute;
top:0px;
left:0px;
float:left;
width:100px;
height:100px;
z-index:1;
border:0;
margin:0;
padding:0;
}
#picdscrp
{
position:absolute;
top:0px;
left:0px;
float:left;
width:100px;
height:100px;
border:0;
background-color:pink;
margin:0;
padding:0;
}
</style>
<script type="text/javascript">

function applyOnclick(){
var img = document.images;
for(i=0;img.length>i;i++){
if(img[i].className=='lilbill'){
img[i].onclick = function(){showBig(this);}
}
}
}
var raekkefolge,num,intId,ny = true;
function showBig(elm){
if(ny)ny = !ny;
else return;
var id=elm.name.replace(/^.*?(\d+)$/,"$1"),idT=elm.title,tmp,n;
num = 0;
raekkefolge = new Array();
for(i=0;25>i;i++)raekkefolge[i] = i+1;
for(i=0;25>i;i++){
n = Math.floor(Math.random()*raekkefolge.length);
tmp = raekkefolge[i];
raekkefolge[i] = raekkefolge[n];
raekkefolge[n] = tmp;
setTimeout("document.getElementById('visForsideLink').style.display = 'inline';",3000)


}

alert("billede" + id + ".jpg" + idT);//her har jeg testet at det der skrives i title medtages, men jeg kan så ikke få det det rigtige sted hen
document.images['stortbillede'].src = "billede" + id + ".jpg";
txt = idT;
intId = setInterval('hideSmall()',80);

}

function hideSmall(){
document.getElementById('lillebillede'+raekkefolge[num++]).style.display='none';
if(num==25){clearInterval(intId);ny = true;}
}
window.onload = applyOnclick;
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>
<body>
<table align="center">
<tr>
<td>
<div id="img-container"> <img name="stortbillede" id="stortbillede" src="default.jpg">
        <img name="lillebillede1" id="lillebillede1" src="1.jpg" class="lilbill" title="Dette er en bil">
        <img name="lillebillede2" id="lillebillede2" src="2.jpg" class="lilbill" title="blablabla2" style="left:100px;">
        <img name="lillebillede3" id="lillebillede3" src="3.jpg" class="lilbill" title="blablabla3" style="left:200px;">
        <img name="lillebillede4" id="lillebillede4" src="4.jpg" class="lilbill" title="blablabla4" style="left:300px;">
        <img name="lillebillede5" id="lillebillede5" src="5.jpg" class="lilbill" title="blablabla5" style="left:400px;">
        <img name="lillebillede6" id="lillebillede6" src="6.jpg" class="lilbill" title="blablabla6" style="top:100px;">
        <img name="lillebillede7" id="lillebillede7" src="7.jpg" class="lilbill" title="blablabla7" style="top:100px;left:100px;">
        <img name="lillebillede8" id="lillebillede8" src="8.jpg" class="lilbill" title="blablabla8" style="top:100px;left:200px;">
        <img name="lillebillede9" id="lillebillede9" src="9.jpg" class="lilbill" title="blablabla9" style="top:100px;left:300px;">
        <img name="lillebillede10" id="lillebillede10" src="10.jpg" class="lilbill" title="blablabla10" style="top:100px;left:400px;">
        <img name="lillebillede11" id="lillebillede11" src="11.jpg" class="lilbill" title="blablabla11" style="top:200px;">
        <img name="lillebillede12" id="lillebillede12" src="12.jpg" class="lilbill" title="blablabla12" style="top:200px;left:100px;">
        <img name="lillebillede13" id="lillebillede13" src="13.jpg" class="lilbill" title="blablabla13" style="top:200px;left:200px;">
        <img name="lillebillede14" id="lillebillede14" src="14.jpg" class="lilbill" title="blablabla14" style="top:200px;left:300px;">
        <img name="lillebillede15" id="lillebillede15" src="15.jpg" class="lilbill" title="blablabla15" style="top:200px;left:400px;">
        <img name="lillebillede16" id="lillebillede16" src="16.jpg" class="lilbill" title="blablabla16" style="top:300px;">
        <img name="lillebillede17" id="lillebillede17" src="17.jpg" class="lilbill" title="blablabla17" style="top:300px;left:100px;">
        <img name="lillebillede18" id="lillebillede18" src="18.jpg" class="lilbill" title="blablabla18" style="top:300px;left:200px;">
        <img name="lillebillede19" id="lillebillede19" src="19.jpg" class="lilbill" title="blablabla19" style="top:300px;left:300px;">
        <img name="lillebillede20" id="lillebillede20" src="20.jpg" class="lilbill" title="blablabla20" style="top:300px;left:400px;">
        <img name="lillebillede21" id="lillebillede21" src="21.jpg" class="lilbill" title="blablabla21" style="top:400px;">
        <img name="lillebillede22" id="lillebillede22" src="22.jpg" class="lilbill" title="blablabla22" style="top:400px;left:100px;">
        <img name="lillebillede23" id="lillebillede23" src="23.jpg" class="lilbill" title="blablabla23" style="top:400px;left:200px;">
        <img name="lillebillede24" id="lillebillede24" src="24.jpg" class="lilbill" title="blablabla24" style="top:400px;left:300px;">
        <img name="lillebillede25" id="lillebillede25" src="25.jpg" class="lilbill" title="blablabla25" style="top:400px;left:400px;">
      </div>
</td>
</tr>
<tr>
<td align="center">

<a href="#" id="visForsideLink" onclick="for(i=1;26>i;i++){document.getElementById('lillebillede'+i).style.display='inline';};this.style.display='none';return false;" style="display:none;">til galleri</a>


</td>
</tr>
</table>
</body>
</html>
Avatar billede nielle Nybegynder
03. juli 2005 - 08:34 #1
Du kan f.eks. opnå centrering ved at indsætte billedet som baggrund i div'en:

#stortbillede {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 500px;
    height: 500px;
    z-index: -1;

    background-image: url('default.jpg');
    background-repeat: no-repeat;
    background-position: center;
}

- og så lave din nuværende img-tag om til en div:

<div id="img-container">
...
<div name="stortbillede" id="stortbillede"></div>
...
</div>

Der skal selvfølgelig også lige tilrettes lidt i dit JavaScript. Jeg er ikke helt sikker, men mod det ikke er noget med at rette;

document.images['stortbillede'].src = "billede" + id + ".jpg";

- til:

document.getElementById['stortbillede'].style.background-image = "billede" + id + ".jpg";

- eller:

document.getElementById['stortbillede'].style.background-image.url = "billede" + id + ".jpg";
Avatar billede roenving Novice
03. juli 2005 - 11:23 #2
.style.backgroundImage ...
Avatar billede roenving Novice
03. juli 2005 - 11:24 #3
Øv ...

.style.backgroundImage = 'url(billede' + id + '.jpg)';
Avatar billede topperware Nybegynder
03. juli 2005 - 14:39 #4
Hej eksperter - det ser rigtigt lovende ud, men må jeg lige vende tilbage lidt senere, når jeg har testet. (er lige optaget af noget andet)
Avatar billede topperware Nybegynder
03. juli 2005 - 21:44 #5
Hey - så er jeg tilbage, og det fungerer fint, 1000 tak
... men når nu det store billede ligger som baggrundsbillede, kan man så godt placere en tekst relative til dette. Jeg tænker på linket "til galleri", som jeg gerne vil have placeret lige under det store billede i højre hjørne.

Og smid svar så skal I da have point.
Avatar billede nielle Nybegynder
03. juli 2005 - 21:59 #6
Du placerer jo teksten relativt til div'en - ikke til selve billedet. Så det skulle ikke give dig nogen problemer.
Avatar billede nielle Nybegynder
03. juli 2005 - 21:59 #7
... og et svar :^)
Avatar billede topperware Nybegynder
03. juli 2005 - 22:06 #8
men giver det ikke et problem, jeg mener div´en er jo 500x500 px, og et givent billede er måske 340x500 px, og jeg vil jo gerne have linket flugter med billedets nederste højrne. Vil linket ikke placere sig under div´en der er 500x500 px hver gang, og ikke efter hvor bredt billedet er? Håber det var til at forstå.
Avatar billede nielle Nybegynder
03. juli 2005 - 23:16 #9
Du har 100% ret i din analyse, men jeg ved desværre ikke hvordan man løser det. Udover at anbringe billedet som baggrund så kender jeg ingen nemme måder at centerer et billede (der er formentlig altid JavaScript-måden, men den kan ikke lige kaldes nem.)
Avatar billede topperware Nybegynder
03. juli 2005 - 23:28 #10
Er det ikke muligt på en eller anden måde at fjerne width og height fra #stortbillede, så div´en tager størrelse efter det billede der placeres i den? Og derefter placere tekst relativt til div´en.
Avatar billede nielle Nybegynder
04. juli 2005 - 06:42 #11
Men, så består problemet i stedet i at få div'en placeret centreret i forhold til en anden div. Og det er lige så svært.
Avatar billede topperware Nybegynder
04. juli 2005 - 07:11 #12
Nå...det er vist ikke sådan ligetil. Kan man (vha. JavaScript) sige at width og height i #stortbillede skal være = width og height fra det givne store billede der vises??
Avatar billede roenving Novice
04. juli 2005 - 10:17 #13
Vil resten af dit design så ikke hoppe frem og tilbage ?-)
Avatar billede topperware Nybegynder
05. juli 2005 - 10:16 #14
Det kan jeg ikke lige gennemskue, hvilken "resten"?
Er det muligt at gøre følgende:
#stortbillede er en div hvori det ønskede store billede indsættes, alt efter hvilket lille billede man klikker på. Så vidt jeg kan se indsættes det store billede direkte i div´en. Kan man ikke lade div´en indeholde en tabel som det store billede så indsættes og centreres i, og derefter placere de 2 tekster relativt til det store billede... eller er det noget vrøvl?
Avatar billede topperware Nybegynder
05. juli 2005 - 11:35 #15
... Problemet opstå jo fordi de store billeder ikke er lige store (det troede jeg som udgangspunkt de ville være). Hvis nu de alle var 500x500 px, kunne man jo sagtens placere de to tekster relativt og dermed få dem anbragt præcist fx ud til billedets nedereste og øverste højre kant. (Der er lige nøjagtigt det jeg ønsker)
Avatar billede topperware Nybegynder
05. juli 2005 - 23:15 #16
... Eller bare: hvordan (hvis man kan) får jeg det givne store billede svarende til det lille udsnit der klikkes på; sat ind i en tabel jeg har placeret i div´en #stortbillede?
Avatar billede nielle Nybegynder
06. juli 2005 - 19:57 #17
Jeg tror desværre kun at dette er muligt gennem JavaScript - desværrre ved jeg ikke lige hvordan. CSS i sig selv har - mystisk nok - ikke de store muligheder for at man kan centrere hvad som helst.
Avatar billede topperware Nybegynder
09. juli 2005 - 00:19 #18
... Ok...
(Måske til roenving) kan man ikke på en eller anden måde have en tabel der er centreret og tager størrelse efter det givne billede der indsættes efter et klik på et lille billede - inde i div´en #stortbillede.
Avatar billede topperware Nybegynder
09. juli 2005 - 10:41 #19
All right folks,
er stadig væk meget interesseret i et svar på det med en tabel i div´en, men holder lige lidt ferie.
I hvert fald, mange tak for indsatsen indtil nu.

topperware
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