Carousel Accessibility
My Home Page had a Carousel display of some photographs. I removed it as I thought that it was both distracting and not understood by the casual visitor.
I called my carousel display 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); };