var carousels = []; class Carousel { constructor(obj) { this.obj = obj; this.current = 0; this.items = []; this.items_widths = []; for(var i = 0; i < this.obj.children.length; i ++) { var item = this.obj.children[i]; if(item.classList.contains("carousel-item")) { this.items.push(item); this.items_widths.push(Math.min(item.offsetWidth, 128)); } } } step() { this.current = (this.current+1) % this.items.length; var max_width = this.obj.offsetWidth; var width = 16*this.items.length; for(var i = 0; i < this.items.length; i ++) { var j = (i + this.current) % this.items.length; var item = this.items[j]; if(!item.classList.contains("carousel-hidden")) { // Update width this.items_widths[j] = Math.min(item.offsetWidth, 128); } width += this.items_widths[j]; if(width > max_width) { item.classList.add("carousel-hidden"); } else { this.obj.appendChild(item); item.classList.remove("carousel-hidden"); } } } } function step_carousels() { for(carousel of carousels) { carousel.step(); } } window.onload = function() { for(obj of document.getElementsByClassName("carousel")) { carousels.push(new Carousel(obj)) } step_carousels(); setInterval(step_carousels, 2000); };