Skip to content

Instantly share code, notes, and snippets.

@mattborn
Last active December 30, 2016 19:50
Show Gist options
  • Save mattborn/26360f214bde5205a9b7219a7b28324e to your computer and use it in GitHub Desktop.
Save mattborn/26360f214bde5205a9b7219a7b28324e to your computer and use it in GitHub Desktop.
Pure JS Slider
<!doctype html>
<html>
<head>
<title>Pure JS Slider</title>
</head>
<body>
<script src="slider.js"></script>
</body>
</html>
const frame = document.createElement('div');
frame.id = 'frame';
const slider = document.createElement('div');
slider.id = 'slider';
frame.appendChild(slider);
const slides = [1,2,3,4,5];
slides.forEach(function (i) {
const slide = document.createElement('div');
slide.className = 'slide';
slide.style.backgroundImage = 'url(http://lorempixel.com/800/600/animals/'+ i +')';
slider.appendChild(slide);
});
setSliderWidth(slider);
const prev = document.createElement('button');
prev.id = 'prev';
prev.innerText = 'Previous';
prev.onclick = prevSlide;
frame.appendChild(prev);
const next = document.createElement('button');
next.id = 'next';
next.innerText = 'Next';
next.onclick = nextSlide;
frame.appendChild(next);
document.body.innerHTML = '';
document.body.appendChild(frame);
const Selectors = {
'body': {
margin: '0 auto',
maxWidth: '800px',
},
'#frame': {
height: '50vh',
overflow: 'hidden',
position: 'relative',
},
'#slider': {
display: 'flex',
height: '100%',
left: 0,
position: 'absolute',
transition: 'left 195ms cubic-bezier(0,0,.2,1)',
},
'.slide': {
backgroundPosition: 'center',
backgroundSize: 'cover',
flex: 1,
},
'#prev': {
left: 0,
position: 'absolute',
top: '50%',
transform: 'translateY(-50%)',
},
'#next': {
position: 'absolute',
right: 0,
top: '50%',
transform: 'translateY(-50%)',
}
};
function setSliderWidth (slider) {
slider.style.width = 100 * slides.length +'%';
}
let currentSlide = 0;
setInterval(nextSlide, 2000);
function nextSlide () {
if (currentSlide === (slides.length - 1)) {
currentSlide = 0;
} else {
currentSlide++;
}
animateSlide();
}
function prevSlide () {
if (currentSlide === 0) {
currentSlide = slides.length - 1;
} else {
currentSlide--;
}
animateSlide();
}
function animateSlide () {
document.getElementById('slider').style.left = currentSlide * -100 +'%';
}
window.addEventListener('resize', function () {
setSliderWidth(document.getElementById('slider'));
});
// document.addEventListener('DOMContentLoaded', function () {
for (Selector in Selectors) {
const nodes = document.querySelectorAll(Selector);
for (let i = 0; i < nodes.length; i++) {
const style = Selectors[Selector];
for (key in style) {
nodes[i].style[key] = style[key];
}
}
}
// });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment