Reputation: 304
I am building a little project to help understand Javascript better. I was hoping if someone can show me how to make this slider loop I have to be random every time the pbfNext() function is pressed.
I do not need to know the jquery version of this just javascript. Thank you.
Javascript:
var slideIndex = 1;
showSlides(slideIndex);
function pbfNext(n) {
showSlides(slideIndex += n);
}
function showSlides(n) {
var i;
var slides = document.getElementsByClassName("worksheet");
if (n > slides.length) {slideIndex > 1}
if (n < 1) {slideIndex = slides.length}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slides[slideIndex-1].style.display = "block";
}
HTML:
<div class="worksheet">
<iframe src="\Users\andrew.lee\Desktop\Publifiedlabs\Admin\Programming\JS-Rand-Worksheets-v1.0\arrays.html" class="pbf-iframe"></iframe>
</div>
<div class="worksheet">
1<iframe src="\Users\andrew.lee\Desktop\Publifiedlabs\Admin\Programming\JS-Rand-Worksheets-v1.0\arrays.html" class="pbf-iframe"></iframe>
</div>
<div class="worksheet">
2<iframe src="\Users\andrew.lee\Desktop\Publifiedlabs\Admin\Programming\JS-Rand-Worksheets-v1.0\arrays.html" class="pbf-iframe"></iframe>
</div>
Upvotes: 1
Views: 1061
Reputation: 26
pbfNext
function:
function pbfNext(n) { //You don't actually need to pass anything into this function
var numberOfSlides = document.getElementsByClassName("worksheet").length; //Get the number of slides. You need this to create the range of randomness
var randomSlideNumber = Math.floor(Math.random() * numberOfSlides) //Generate a random number between 0 and 1 * by number of slides then round down. Returns a number between 0 and numberOfSlides-1
showSlides(randomSlideNumber); //Insert the random number into the showSlides function
}
showSlides
function:
function showSlides(n) {
var slides = document.getElementsByClassName("worksheet");
for (let i = 0; i < slides.length; i++) { //Cycle through the "slides" elements
slides[i].style.display = "none"; //Set the display to all of the "slides" elements to none
}
slides[n].style.display = "block"; //Set randomly selected "slides" element to block.
}
Bonus -
Prevent a random slide from being picked twice in a row.
Add a new global variable like var previousIndex = null;
var previousIndex = null; //this will keep track of the previous slide
Add the following to the pbfNext
function between randomSlideNumber
and showSlides(randomSlideNumber)
//Create a new random number between a range of numbers.
//Then add the new random to the previous random number to create a new random number.
if (previousIndex === randomSlideNumber){ //Check if current random index is same as the previous index
let min = randomSlideNumber === 0 ? randomSlideNumber + 1 : randomSlideNumber * -1; // if random number is 0 the minimum is -1 else the minimun is the negetive of the number
let max = numberOfSlides - randomSlideNumber; //The maximun is the number of slides minus the random
randomSlideNumber += Math.floor(Math.random() * (max - min) + min); //Generate a random number from the range of min & max and add/subtract from the randomSlideNumber
}
previousIndex = randomSlideNumber;
Upvotes: 1
Reputation: 10074
Change if (n > slides.length) {slideIndex > 1}
to:
if (n >= slides.length) { slideIndex = 0 }
For randomness replace pbfNext
function with:
function pbfNext() {
var randomIndex = Math.floor(Math.random() * slides.length);
showSlides(randomIndex);
}
Upvotes: 2