Jack Maalouf
Jack Maalouf

Reputation: 71

Controlling JavaScript slideshow with keyboard

So basically I want to move my slider index with my keyboard.

The current slideshow can be navigated with the built in buttons, but i want to be able to use my keyboard to move forward or back. I have linked my keyboard with switch cast (37 for left) (39 for right), but nothing happens.

Here is all my JS

var slideIndex = 1;

showSlides(slideIndex);

function plusSlides(n) {
    showSlides(slideIndex += n);
}

function currentSlide(n) {
    showSlides(slideIndex = n);
}

function showSlides(n) {
    var i;
    var slides = document.getElementsByClassName("mySlides");
    var dots = document.getElementsByClassName("dot");
    if (n > slides.length) {
        slideIndex = 1
    }
    if (n < 1) {
        slideIndex = slides.length
    }
    for (i = 0; i < slides.length; i++) {
        slides[i].style.display = "none";
    }
    for (i = 0; i < dots.length; i++) {
        dots[i].className = dots[i].className.replace(" active", "");
    }
    slides[slideIndex - 1].style.display = "block";
    dots[slideIndex - 1].className += " active";
}

document.onkeydown = function(n) {
     switch (e.keyCode) {
         case 37:
            //left
            slideIndex--;
            break;
         case 39:
            //right
            slideIndex++;
            break;          
    }
}

Upvotes: 1

Views: 1282

Answers (1)

Sergey Benzenko
Sergey Benzenko

Reputation: 280

  1. Change the variable name in document.onkeydown.
  2. Make sure you call the function to display slides, when the current slide changes.

E.g.:

    document.onkeydown = function(e) {
        switch (e.keyCode) {
            case 37:
                //left
                e.preventDefault();
                slideIndex--;
                showSlides(slideIndex);
                break;
            case 39:
                //right
                e.preventDefault();
                slideIndex++;
                showSlides(slideIndex);
                break;
        }
    }

Upvotes: 2

Related Questions