Author: | soliniak |
---|---|
Views Total: | 6,373 views |
Official Page: | Go to website |
Last Update: | July 21, 2018 |
License: | MIT |
Preview:

Description:
A minimal, infinite-looping image slider that slides through any number of images just like a carousel.
With support for navigation, autoplay, image counter, loading indicator, CSS3 animations, etc.
How to use it:
Add images and slider controls to the webpage.
<div class="slider_container"> <div class="slides"> <img src="1.jpg" alt="one" class="pic" name="1"> <img src="2.jpg" alt="two" class="pic" name="2"> <img src="3.jpg" alt="three" class="pic" name="3"> <img src="4.jpg" alt="four" class="pic" name="4"> </div> <nav class="slider_navigation"> <div class="navigation-buttons"> <button class="button button-left"></button> <button class="button button-right"></button> <label class="autoplay-controls"> <input type="checkbox" name="autoplay" checked> <div class="checkmark"></div> <div class="autoplay-sub">Autoplay</div> </label> </div> <span class="slide_counter"></span> </nav> </div>
The necessary CSS styles for the slider.
.button, .checkmark { background-color: #dedede; border: 0; border-radius: 50%; box-shadow: 0 0 0 0 rgba(190, 190, 220, 0.2); color: white; height: 30px; margin: 0 0.5rem 0 0; cursor: pointer; position: relative; transition: box-shadow 0.2s; width: 30px; } .button:hover, .checkmark:hover { background-color: #ccc; } .button:active, .checkmark:active { background: #2196F3; box-shadow: 0 0 15px 40px rgba(220, 220, 250, 0); } .autoplay-controls { cursor: pointer; } .autoplay-controls:active > .checkmark { background: #2196F3; box-shadow: 0 0 15px 40px rgba(220, 220, 250, 0); } .slider_container { align-items: center; display: flex; flex-direction: column; min-height: 400px; width: 900px; } .slide_counter { float: right; margin: 0 1rem; } .slides { height: 400px; overflow: hidden; position: relative; width: 900px; } .navigation-buttons { display: inherit; align-items: center; flex-direction: row; justify-content: center; } .slider_navigation { margin-top: 1rem; display: flex; flex-direction: row; height: 20px; justify-content: space-between; position: relative; width: 100%; } .loader { background-color: white; background-image: url("loading.gif"); background-position: center center; background-repeat: no-repeat; background-size: 150px; height: 100%; position: absolute; width: 100%; z-index: 300; } input { display: none; } input:checked ~ .checkmark:after { display: block; } input:checked ~ .checkmark { background-color: #2196F3; } .autoplay-sub { float: left; line-height: 30px; font-size: 0.7rem; } .checkmark { float: left; } .checkmark:after { content: ""; position: absolute; display: none; left: 11px; top: 7px; width: 5px; height: 10px; border: solid white; border-width: 0 3px 3px 0; -webkit-transform: rotate(45deg); transform: rotate(45deg); } .button-left:after, .button-right:after { border: solid white; border-width: 0 3px 3px 0; content: ""; display: block; height: 8px; position: absolute; width: 8px; } .button-left:after { left: 11px; top: 10px; -webkit-transform: rotate(135deg); transform: rotate(135deg); } .button-right:after { left: 7px; top: 10px; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); } .inright { -webkit-animation: goInL 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); animation: goInL 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); position: relative; z-index: 300 !important; } @-webkit-keyframes goInL { 0% { left: -900px; } 100% { left: 0; } } @keyframes goInL { 0% { left: -900px; } 100% { left: 0; } } .outright { -webkit-animation: goOutL 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); animation: goOutL 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); position: relative; z-index: 200; } @-webkit-keyframes goOutL { 0% { left: 0; } 100% { left: 900px; } } @keyframes goOutL { 0% { left: 0; } 100% { left: 900px; } } .inleft { -webkit-animation: goInR 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); animation: goInR 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); position: relative; z-index: 300 !important; } @-webkit-keyframes goInR { 0% { left: 900px; } 100% { left: 0; } } @keyframes goInR { 0% { left: 900px; } 100% { left: 0; } } .outleft { -webkit-animation: goOutR 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); animation: goOutR 0.5s cubic-bezier(1, 1.59, 0.61, 0.74); position: relative; z-index: 200; } @-webkit-keyframes goOutR { 0% { left: 0; } 100% { left: -900px; } } @keyframes goOutR { 0% { left: 0; } 100% { left: -900px; } } .pic { left: 0; min-height: 400px; -o-object-fit: cover; object-fit: cover; position: absolute; top: 0; width: 900px; } .pic:first-child { z-index: 100; }
Load the necessary JavaScript file at the end of the document. Done.
<script src="script.js"></script>
Override the default variables to customize the slider.
const autoBox = document.querySelector("input[name=autoplay]"), autoDir = "left", // left or right btnLeft = document.querySelector(".button-left"), btnRight = document.querySelector(".button-right"), loader = document.createElement("div"), counter = document.querySelector(".slide_counter"), slider = document.querySelector(".slides"), slides = document.querySelectorAll(".slides img"), speed = 2000; // = 2s