Avatar billede phpbegynder2004 Nybegynder
17. oktober 2007 - 15:22 Der er 9 kommentarer og
1 løsning

Billede slide med tilhørende tekst

Hej,

Jeg har et slideshow script til billeder i javascript. Det skifter billede i et interval af x sekunder. Jeg vil dog gerne kunne knytte noget tekst til hvert billede, så denne tekst bliver vist ved siden af billedet.

<head>
<script language="JavaScript" type="text/JavaScript"><!-->
//declaring necessary local variables

var img = new Array(10); //array to hold the images
var start = null; //start pointer
var counter = 1; //counts the image sequences
var delayTime = null; //user defined

if(document.images) {        //pre-load all the images
  for(i = 1; i <= 10; i++)  {
    img[i] = new Image();
    img[i].src = "pic" + i + ".jpg";
  }
}

//function for getting the user defined delay time

function getDelayTime(dlTime) {
  var temp = parseInt(dlTime);
  if(temp != NaN)
    delayTime = temp * 1000;
  else
    delayTime = 1000;
}

//function for changing the images
function anim() {
  counter++;
  document.images[0].src = img[counter].src;
  if(counter == 10)
    counter = 0; //sets the counter value to 0
}

//function for starting the slide show
function slide() {
  getDelayTime(document.form1.delay.value);
  with(document.form1)  {
    start = setInterval("anim()", delayTime);
    stShow.disabled = true;
    spShow.disabled = false;
  }

}

//function to stop the slide show
function stopSlide() {
  clearInterval(start);
  document.form1.stShow.disabled = false;
  document.form1.spShow.disabled = true;
}

//--></script>

</head>
<body onload="slide();">

<img src="pic1.jpg" border=0 width=400 height=300><br>
<form name="form1">
<input type="hidden" size=2 value="5" name=delay><br>
</form>


Denne må gerne laves om til et array, så samtlige bilelder er defineret på forhånd. Ved bare ikke hvordan det gøres.

if(document.images) {        //pre-load all the images
  for(i = 1; i <= 10; i++)  {
    img[i] = new Image();
    img[i].src = "pic" + i + ".jpg";
  }
}


På forhånd tak :)
Avatar billede w13 Novice
17. oktober 2007 - 17:22 #1
Jeg har skrevet din kode om og optimeret den og tilføjet billed- og tekst-arrays. Se om du kan bruge den:
-----------------------------------------------------------
<div id="slideshow"></div>

<label>Stop slideshow</label><input type="checkbox" id="stopslideshow">

<script type="text/javascript">
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

var slideshow=document.getElementById("slideshow");
for(i=0;i<arrImg.length;i++){
    slideshow.appendChild(document.createElement("div"));
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("br"));
    slideshow.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
}
function ShowImg(i){
    if(!document.getElementById("stopslideshow").checked){
        document.getElementById(arrImg[i]).style.display="none";
        i++;if(i==arrImg.length) i=0;
        document.getElementById(arrImg[i]).style.display="inline";
    }
    setTimeout("ShowImg("+i+")",speed);
}
setTimeout("ShowImg(0)",speed);
</script>
-------------------------------------------------
Du skal så bare rette i:
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

Og du kan lave layout som du vil på:
<div id="slideshow"></div>
<label>Stop slideshow</label><input type="checkbox" id="stopslideshow">
Avatar billede phpbegynder2004 Nybegynder
18. oktober 2007 - 03:02 #2
Det ser super godt ud. Mange tak!
1)Jeg kunne dog godt ønske mig, at checkbox fuldstændig forsvandt, men skriver holder tilsyneladende op med at virke, når jeg fjerner den.

2)Derudover ville jeg gerne have teksten vist ved siden af billedet. Det opnår jeg let ved at fjerne <br>. Men det kunne være rart at teksten komme op omkring midten af billedet og ikke bare står nederst ved siden af. Hvordan tilføjer man en table?

Sætter lige pointene op til 130 :)
Avatar billede w13 Novice
18. oktober 2007 - 13:30 #3
Her er uden checkboksen:
-------------------------------------------
<div id="slideshow"></div>

<script type="text/javascript">
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

var slideshow=document.getElementById("slideshow");
for(i=0;i<arrImg.length;i++){
    slideshow.appendChild(document.createElement("div"));
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("br"));
    slideshow.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
}
function ShowImg(i){
    document.getElementById(arrImg[i]).style.display="none";
    i++;if(i==arrImg.length) i=0;
    document.getElementById(arrImg[i]).style.display="inline";
    setTimeout("ShowImg("+i+")",speed);
}
setTimeout("ShowImg(0)",speed);
</script>
----------------------------------------------------------------
Dette er uden tabel, da tabeller er lidt seje at arbejde med i DOM.
Jeg kan dog godt prøve, men garanterer ikke, det virker:
----------------------------------------------------------------
<div id="slideshow"></div>

<script type="text/javascript">
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

var slideshow=document.getElementById("slideshow");
for(i=0;i<arrImg.length;i++){
    slideshow.appendChild(document.createElement("table"));
    slideshow.lastChild.style.borderWidth="0";
    slideshow.lastChild.style.borderCollapse="collapse";
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild("tbody");
    slideshow.lastChild.lastChild.appendChild("tr");
    slideshow.lastChild.lastChild.lastChild.appendChild("td");
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("br"));
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
}
function ShowImg(i){
    document.getElementById(arrImg[i]).style.display="none";
    i++;if(i==arrImg.length) i=0;
    document.getElementById(arrImg[i]).style.display="inline";
    setTimeout("ShowImg("+i+")",speed);
}
setTimeout("ShowImg(0)",speed);
</script>
Avatar billede phpbegynder2004 Nybegynder
18. oktober 2007 - 14:15 #4
Jeg tænkte nok det ville blive svært med tables. Men så vidt jeg kan se virker eksemplet  hvor checkboxen er fjernet heller ikke.
Avatar billede w13 Novice
18. oktober 2007 - 14:26 #5
Den uden checkboks virker fint på min computer. Bevæger de sig slet ikke på din?

Tabeller virkede ikke nej, men det gør det med følgende kode:
-------------------------------------------------------------
<html>
<head></head>
<body>

<div id="slideshow"></div>

<script type="text/javascript">
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

var slideshow=document.getElementById("slideshow");
for(i=0;i<arrImg.length;i++){
    slideshow.appendChild(document.createElement("table"));
    slideshow.lastChild.style.borderWidth="0";
    slideshow.lastChild.style.borderCollapse="collapse";
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("tbody"));
    slideshow.lastChild.lastChild.appendChild(document.createElement("tr"));
    slideshow.lastChild.lastChild.lastChild.style.verticalAlign="middle";
    slideshow.lastChild.lastChild.lastChild.appendChild(document.createElement("td"));
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.lastChild.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
}
function ShowImg(i){
    document.getElementById(arrImg[i]).style.display="none";
    i++;if(i==arrImg.length) i=0;
    document.getElementById(arrImg[i]).style.display="inline";
    setTimeout("ShowImg("+i+")",speed);
}
setTimeout("ShowImg(0)",speed);
</script>

</body>
</html>
----------------------------------------------------------
Dog løser det ikke dit problem. Teksten vises stadig nederst i forhold til billedet. En valign="middle" løser ikke problemet. Det er bare sådan tekst vises i forhold til billeder.
Avatar billede phpbegynder2004 Nybegynder
19. oktober 2007 - 00:10 #6
Okay, tak for hjælpen! :)
Avatar billede w13 Novice
19. oktober 2007 - 04:43 #7
Tak for point. =)
Avatar billede phpbegynder2004 Nybegynder
19. oktober 2007 - 14:56 #8
Jeg har siddet og kigget på problemet ved valign i tables.
Nu ahr jeg sat en border på, og det ser ud som om, der kun er en celle. Der skal vel være to: en hvor billedet er i, og en hvor teksten står i. På den måde kan teksten komme op på midten, ved siden af billedet. Er det noget du kan gøre?

    slideshow.appendChild(document.createElement("table"));
    slideshow.lastChild.setAttribute("border","3");
    slideshow.lastChild.style.borderCollapse="collapse";
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("tbody"));
    slideshow.lastChild.lastChild.appendChild(document.createElement("tr"));
    slideshow.lastChild.lastChild.lastChild.style.verticalAlign="middle";
    slideshow.lastChild.lastChild.lastChild.appendChild(document.createElement("td"));
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.lastChild.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
Avatar billede w13 Novice
19. oktober 2007 - 18:54 #9
Nå ja, det slog mig ikke lige. Sådan her måske (utestet):
---------------------------------------------------------
<html>
<head></head>
<body>

<div id="slideshow"></div>

<script type="text/javascript">
var arrImg=new Array("/images/billede1.jpg","/andet/t1.bmp","/images/billede2.jpg");
var arrImgTxt=new Array("Ferie","Andet","Ferie igen");
var speed=2000;

var slideshow=document.getElementById("slideshow");
for(i=0;i<arrImg.length;i++){
    slideshow.appendChild(document.createElement("table"));
    slideshow.lastChild.style.borderWidth="0";
    slideshow.lastChild.style.borderCollapse="collapse";
    slideshow.lastChild.style.display=i==0?"inline":"none";
    slideshow.lastChild.setAttribute("id",arrImg[i]);
    slideshow.lastChild.appendChild(document.createElement("tbody"));
    slideshow.lastChild.lastChild.appendChild(document.createElement("tr"));
    slideshow.lastChild.lastChild.lastChild.style.verticalAlign="middle";
    slideshow.lastChild.lastChild.lastChild.appendChild(document.createElement("td"));
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createElement("img"));
    slideshow.lastChild.lastChild.lastChild.lastChild.lastChild.setAttribute("src",arrImg[i]);
    slideshow.lastChild.lastChild.lastChild.appendChild(document.createElement("td"));
    slideshow.lastChild.lastChild.lastChild.lastChild.appendChild(document.createTextNode(arrImgTxt[i]));
}
function ShowImg(i){
    document.getElementById(arrImg[i]).style.display="none";
    i++;if(i==arrImg.length) i=0;
    document.getElementById(arrImg[i]).style.display="inline";
    setTimeout("ShowImg("+i+")",speed);
}
setTimeout("ShowImg(0)",speed);
</script>

</body>
</html>
Avatar billede phpbegynder2004 Nybegynder
20. oktober 2007 - 13:11 #10
Det er perfekt :)
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