Carousel Accessibility

My current Home Page has a Carousel display of some photographs. I called it a slide show. Looking closer at some of the ARIA reccomendations I see that there are potential problems with accessibilty.

My home page features photos for purely cosmetic reasons.

The WAI example

I made a page for this using their sample code. In my opinion there is too much overhead in the code to make it really viable for "simple" use. If you have a series of explanatory slides that need to be displayed then fine, but a "pretty pretty" rolling display of photos (such as on a home page) I don't think that it is worth it.

The code

The code for the example is pretty involved and I would guess that it is still in the experimental stage. It is spread between a CSS file and a number of Javascipt files that I will try and look at here.

There is much for me to learn here even though I do not intend to use the code at the present time. There is much DOM object stuff here, the following is an example prototype function:

Carousel.prototype.init = function () {

  var elems, elem, button, items, item, imageLinks, i;

  this.liveRegionNode = this.domNode.querySelector('.carousel-items');

  items = this.domNode.querySelectorAll('.carousel-item');

  for (i = 0; i < items.length; i++) {
    item = new CarouselItem(items[i], this);

    item.init();
    this.items.push(item);

    if (!this.firstItem) {
      this.firstItem = item;
      this.currentDomNode = item.domNode;
    }
    this.lastItem = item;

    imageLinks = items[i].querySelectorAll('.carousel-image a');

    if (imageLinks && imageLinks[0]) {
      imageLinks[0].addEventListener('focus', this.handleImageLinkFocus.bind(this));
      imageLinks[0].addEventListener('blur', this.handleImageLinkBlur.bind(this));
    }

  }

  // Pause, Next Slide and Previous Slide Buttons

  elems = document.querySelectorAll('.carousel .controls button');

  for (i = 0; i < elems.length; i++) {
    elem = elems[i];

    if (elem.classList.contains('rotation')) {
      button = new PauseButton(elem, this);
      this.pauseButton = elem;
      this.pauseButton.classList.add('pause');
      this.pauseButton.setAttribute('aria-label', this.pauseLabel);
    }
    else {
      button = new CarouselButton(elem, this);
    }

    button.init();
  }

  this.currentItem = this.firstItem;

  this.domNode.addEventListener('mouseover', this.handleMouseOver.bind(this));
  this.domNode.addEventListener('mouseout', this.handleMouseOut.bind(this));

  // Start rotation
  setTimeout(this.rotateSlides.bind(this), this.timeInterval);
};

Links

External Sources

Carousel Accessibility