├── LICENSE.txt ├── README.md ├── demo.html └── minimal-carousel.js /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Lucas Videla 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # minimal carousel 2 | 3 | A minimalist carousel. No jQuery. 4 | 5 | ## Demo 6 | 7 | [See it live!](http://labs.wecode.io/minimal-carousel/) 8 | 9 | ## Options 10 | 11 | * `carousel`: css selector of carousel container. Defaults to `.carousel` 12 | * `delay`: delay between slides in seconds. Defaults to `2.5` secs 13 | * `autoplay`: whether or not it plays automaticaly. Defaults to `true` 14 | 15 | ## Usage 16 | 17 | ### HTML 18 | 19 |
49 | <div class="carousel"> 50 | <ul> 51 | <li> 52 | First impressive message! 53 | </li> 54 | <li> 55 | Second message with all the magic 56 | </li> 57 | <li> 58 | Also, you can configure minimal carousel as you want. 59 | </li> 60 | </ul> 61 | </div> 62 |63 | 64 |
66 | .carousel ul li { 67 | display: none; 68 | } 69 |70 | 71 |
73 | new Carousel({ 74 | carousel: '.carousel', 75 | delay: 2.5, 76 | autoplay: true 77 | }) 78 |79 | 80 | 81 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /minimal-carousel.js: -------------------------------------------------------------------------------- 1 | function Carousel(settings){ 2 | 'use strict'; 3 | settings = settings || {}; 4 | this.carousel = document.querySelector(settings.carousel || '.carousel'); 5 | this.slides = this.carousel.querySelectorAll('ul li'); 6 | this.delay = settings.delay || 2.5; 7 | this.autoplay = settings.autoplay === undefined ? true : settings.autoplay; 8 | 9 | this.slides_total = this.slides.length; 10 | this.current_slide = -1; 11 | 12 | if (this.autoplay) { 13 | this.play(); 14 | } 15 | } 16 | 17 | Carousel.prototype.next = function (is_interval_call) { 18 | 'use strict'; 19 | for (var s = 0; s < this.slides.length; s += 1) { 20 | this.slides[s].style.display = 'none'; 21 | } 22 | this.current_slide = (this.current_slide + 1) % this.slides.length; 23 | this.slides[this.current_slide].style.display = 'block'; 24 | if (this.autoplay && this.interval && !is_interval_call) { 25 | var that = this; 26 | clearInterval(this.interval); 27 | this.interval = setTimeout(function () { 28 | that.play(); 29 | }, this.delay * 1000); 30 | } 31 | }; 32 | 33 | Carousel.prototype.prev = function () { 34 | 'use strict'; 35 | for (var s = 0; s < this.slides.length; s += 1) { 36 | this.slides[s].style.display = 'none'; 37 | } 38 | this.current_slide = Math.abs(this.current_slide - 1 + this.slides.length) % this.slides.length; 39 | this.slides[this.current_slide].style.display = 'block'; 40 | if (this.autoplay && this.interval) { 41 | var that = this; 42 | clearInterval(this.interval); 43 | this.interval = setTimeout(function () { 44 | that.play(); 45 | }, this.delay * 1000); 46 | } 47 | }; 48 | 49 | Carousel.prototype.play = function () { 50 | 'use strict'; 51 | this.next(true); 52 | var that = this; 53 | this.autoplay = true; 54 | this.interval = setTimeout(function () { 55 | that.play(); 56 | }, this.delay * 1000); 57 | }; 58 | 59 | Carousel.prototype.stop = function () { 60 | 'use strict'; 61 | if (this.interval) { 62 | this.autoplay = false; 63 | clearInterval(this.interval); 64 | } 65 | }; 66 | --------------------------------------------------------------------------------