bespoke-backdrop
Version:
Backdrop elements for Bespoke.js
52 lines (42 loc) • 1.33 kB
JavaScript
module.exports = function() {
return function(deck) {
var backdrops;
function createBackdropForSlide(slide) {
var backdropAttribute = slide.getAttribute('data-bespoke-backdrop');
if (backdropAttribute) {
var backdrop = document.createElement('div');
backdrop.className = backdropAttribute;
backdrop.classList.add('bespoke-backdrop');
deck.parent.appendChild(backdrop);
return backdrop;
}
}
function updateClasses(el) {
if (el) {
var index = backdrops.indexOf(el),
currentIndex = deck.slide();
removeClass(el, 'active');
removeClass(el, 'inactive');
removeClass(el, 'before');
removeClass(el, 'after');
if (index !== currentIndex) {
addClass(el, 'inactive');
addClass(el, index < currentIndex ? 'before' : 'after');
} else {
addClass(el, 'active');
}
}
}
function removeClass(el, className) {
el.classList.remove('bespoke-backdrop-' + className);
}
function addClass(el, className) {
el.classList.add('bespoke-backdrop-' + className);
}
backdrops = deck.slides
.map(createBackdropForSlide);
deck.on('activate', function() {
backdrops.forEach(updateClasses);
});
};
};