Jump to content

slide show


Andreas De Rudder

Recommended Posts

Hi,

 

I try to make a slide show with information that I found on the W3school site (http://www.w3schools.com/w3css/w3css_slideshow.asp).

But it doesn't function. Could anyone tell me why?

 

I have this in the head between the style tags:

 

var slideIndex = 0;
carousel();

function carousel() {
var i;
var x = document.getElementsByClassName("mySlides");
for (i = 0; i < x.length; i++) {
x.style.display = "none";
}
slideIndex++;
if (slideIndex > x.length) {slideIndex = 1}
x[slideIndex-1].style.display = "block";
setTimeout(carousel, 2000);
}

 

And then I have this in the body:

 

<img class="mySlides" src="images/index.jpg">
<img class="mySlides" src="images/indexfoto.jpg">


<a class="w3-btn-floating" onclick="plusDivs(-1)">❮</a>
<a class="w3-btn-floating" onclick="plusDivs(+1)">❯</a>

 

Thank you for trying to help me!

 

Andreas

Link to comment
Share on other sites

This is the problem

 

carousel();

 

This calls the function to start the carousel slideshow, but because Its placed above the elements, it references the elements BEFORE they have been even rendered or exist as it is read from top to bottom.

 

Fix:

Option 1

Place below images, usually at very bottom of page before </body> as

 

<script>

carousel();

</script>

 

Option2

 

call the function AFTER page fully rendered

 

At its current position, change to

 

window.onload = carousel;

Link to comment
Share on other sites

If they are proportionately the same, using width: 100%; height:auto; will make them fill the container width available to them with height adjusting proportionally. To allow for landscape or landscape images it becomes a little bit more complicated.

Link to comment
Share on other sites

I have given two pictures in the slideshow a class and then I have given them a height or width with css, but that doesn't work.

Look at http://msngent.be/information.html

Do I have to do that in an other way?

The pictures are now temporary, but the pictures that will come eventually in the slideshow will probably have different sizes.

Link to comment
Share on other sites

STILL can't see ANY styling to do with the images, you don't have to know ANYTHING about classes for JavaScript in this situation, my suggestion is ALL css related, I would never unnecessary add styling through JavaScript, when it can just be added using css using classes already there to do that very job.

Link to comment
Share on other sites

Thank you. I have added a height in css code to the already existing class, and it works now. All the pictures, small and large, have now the same height, which is ok for me.

 

But I have another question:

 

Is it possible to have on one page two slide shows running at the same time? I have tried it with a div tag around each list of pictures, and do have two slide shows then, but the second starts running after the first has stopped.

Link to comment
Share on other sites

Unfortunately that slideshow is not set up to do that, it loops through each image with class 'mySlides' where ever it maybe, and therefore placing in different div elements won't make a difference. IT will require rewrite of code to achieve that.

Link to comment
Share on other sites

Hmm... i will take a look at this when i get home, but like dsonesuk says... you only define 1 class to all of them, that is how i understand this anyhow :P...

i will take a look at the code when i get home. Possible for you to share the code? The whole website code from the "information.html" file? Just hit "ctrl + c" and "ctrl + v" on a Windows machine to copy and paste the whole code into code-tags so we actually can see what is going on ^^

Seeing the code on website and on here is 2 different things, depending on how you have coded the website :P

 

Will take a look if you share the code :)

LaTeRz ;):P

Link to comment
Share on other sites

  • 1 month later...

Hi, i'm having some troubles make a slide show and i need a little help.

 

i want use the "images as indicators" slideshow but, in first place when i open the page the imagens appears all in line only when i click in one picture he change for the format slideshow. Why that happen?

 

My seconf question is a change i want to do but i don't know if it possible and how to do.

i want instead the pictures apears bottom the slide show they apears in col at right and left of the slideshow.

This is possible? how can i do that happen?

 

I'm sory if i write something wrong but my english isn't so good.

 

TY

Link to comment
Share on other sites

I imagine you are using the styling to hide slideshow images, without this all image will appear at once, until clicking of thumbnail causes code to hide all but selected.

how i do that? i just copy & past the code from w3schools and change the images

Link to comment
Share on other sites

IF you just copied and pasted the code, then changes images maybe its taken time to load w3.css styling from w3schools website completely, before taken effect.

 

It would help if you supplied code, or link, it would save time in this boring game of guessing all the time.

Link to comment
Share on other sites

<div class="w3-content" style="max-width:500px">
			<img class="mySlides" src="images/assets/bussoloceano (5).jpg" style="width:100%">
			<img class="mySlides" src="images/assets/bussoloceano (6).jpg" style="width:100%">
			<img class="mySlides" src="images/assets/bussoloceano (7).jpg" style="width:100%">

			<div class="w3-row-padding w3-section">
				<div class="w3-col s4">
					<img class="demo w3-border w3-hover-shadow" src="images/assets/bussoloceano (5).jpg" style="width:30%" onclick="currentDiv(1)">
					<img class="demo w3-border w3-hover-shadow" src="images/assets/bussoloceano (6).jpg" style="width:30%" onclick="currentDiv(2)">
					<img class="demo w3-border w3-hover-shadow" src="images/assets/bussoloceano (7).jpg" style="width:30%" onclick="currentDiv(3)">
				</div>
			</div>
		</div>
var slideIndex = 1;
showDivs(slideIndex);

function plusDivs(n) {
  showDivs(slideIndex += n);
}

function currentDiv(n) {
  showDivs(slideIndex = n);
}

function showDivs(n) {
	var i;
	var x = document.getElementsByClassName("mySlides");
	var dots = document.getElementsByClassName("demo");
	if (n > x.length) {slideIndex = 1}
	if (n < 1) {slideIndex = x.length} ;
	for (i = 0; i < x.length; i++) {
	 x[i].style.display = "none";
	}
	for (i = 0; i < dots.length; i++) {
	 dots[i].className = dots[i].className.replace(" w3-border-red", "");
	}
	x[slideIndex-1].style.display = "block";  
	dots[slideIndex-1].className += " w3-border-red";
	}

this was what i copy

Link to comment
Share on other sites

And with this which I was referring to in post #21, you thought Ill just ignore that bit, because that can't be alll that important, well it IS!

 

<style>
.mySlides {display:none}
</style>
Edited by dsonesuk
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...