Last active
October 17, 2018 12:39
-
-
Save alegut/f165c2b4e862f8bcc5d0d8990ecd1648 to your computer and use it in GitHub Desktop.
Pure JS slider
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |
<title>Pure JS sider</title> | |
<link rel="stylesheet" href="pjs.css"> | |
<script src="pjs.js"></script> | |
</head> | |
<body> | |
<div class="ac-slider--wrapper"> | |
<div class="ac-slider--container"> | |
<div class="ac-slider--view"> | |
<ul> | |
<li class="ac-slider--view__slides is-active"> | |
<p class="testimonial-quote">Quote 1</p> | |
<p class="testimonial-author">~ Author 1 ~</p> | |
</li> | |
<li class="ac-slider--view__slides"> | |
<p class="testimonial-quote">Quote 2</p> | |
<p class="testimonial-author">~ Author 2 ~</p> | |
</li> | |
<li class="ac-slider--view__slides"> | |
<p class="testimonial-quote">Quote 3</p> | |
<p class="testimonial-author">~ Author 3 ~</p> | |
</li> | |
<li class="ac-slider--view__slides"> | |
<p class="testimonial-quote">Quote 4</p> | |
<p class="testimonial-author">~ Author 4 ~</p> | |
</li> | |
<li class="ac-slider--view__slides"> | |
<p class="testimonial-quote">Quote 5</p> | |
<p class="testimonial-author">~ Author 5 ~</p> | |
</li> | |
</ul> | |
</div> | |
<div class="ac-slider--arrows"> | |
<span class="arrow ac-slider--arrows__left"><</span> | |
<span class="arrow ac-slider--arrows__right">></span> | |
</div> | |
</div> | |
</div> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.ac-slider--wrapper { | |
margin: 0 auto; | |
max-width: calc(90% - 150px); | |
font-size: 20px; | |
} | |
.ac-slider--container { | |
position: relative; | |
width: 40%; | |
margin: auto; | |
} | |
.ac-slider--view { | |
display: block; | |
width: 100%; | |
margin: 0 auto; | |
overflow: hidden; | |
} | |
ul { | |
white-space: nowrap; | |
text-align: center; | |
list-style: none; | |
margin: 0; | |
padding: 0; | |
transition: transform 0.25s ease-out; | |
} | |
.ac-slider--view__slides { | |
white-space: normal; | |
display: inline-block; | |
width: 100%; | |
position: relative; | |
} | |
.ac-slider--arrows { | |
width: 100%; | |
margin: 0 auto; | |
} | |
span { | |
position: absolute; | |
top: 50%; | |
transform: translateX(0) translateY(-50%); | |
width: 20px; | |
height: 20px; | |
display: block; | |
cursor: pointer; | |
border-radius: 50%; | |
background: #f5f5f5; | |
line-height: 1.3em; | |
text-align: center; | |
opacity: 0.5; | |
} | |
span.ac-slider--arrows__left { | |
left: 0; | |
transform: translateX(-100%) translateY(-50%); | |
} | |
span.ac-slider--arrows__right { | |
right: 0; | |
transform: translateX(100%) translateY(-50%); | |
} | |
span:hover { | |
opacity: 1; | |
} | |
.testimonial-quote { | |
font-style: italic; | |
font-weight: 200; | |
font-size: 0.9em; | |
letter-spacing: 0.05em; | |
position: relative; | |
margin-bottom: 0.5em; | |
padding: 0 10px; | |
} | |
.testimonial-author { | |
font-size: 0.6em; | |
font-weight: 800; | |
margin-bottom: 0.5em; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
window.addEventListener("load", function () { | |
// global variables | |
const sliderView = document.querySelector('.ac-slider--view > ul'), | |
sliderViewSlides = document.querySelectorAll('.ac-slider--view__slides'), | |
arrowLeft = document.querySelector('.ac-slider--arrows__left'), | |
arrowRight = document.querySelector('.ac-slider--arrows__right'), | |
sliderLength = sliderViewSlides.length; | |
// sliding function | |
const slideMe = (sliderViewItems, isActiveItem) => { | |
// update the classes | |
isActiveItem.classList.remove('is-active'); | |
sliderViewItems.classList.add('is-active'); | |
// css transform the active slide position | |
sliderView.setAttribute('style', 'transform:translateX(-' + sliderViewItems.offsetLeft + 'px)'); | |
} | |
// before sliding function | |
const beforeSliding = i => { | |
let isActiveItem = document.querySelector('.ac-slider--view__slides.is-active'), | |
currentItem = Array.from(sliderViewSlides).indexOf(isActiveItem) + i, | |
nextItem = currentItem + i, | |
sliderViewItems = document.querySelector(`.ac-slider--view__slides:nth-child(${nextItem})`); | |
// if nextItem is bigger than the # of slides | |
if (nextItem > sliderLength) { | |
sliderViewItems = document.querySelector('.ac-slider--view__slides:nth-child(1)'); | |
} | |
// if nextItem is 0 | |
if (nextItem == 0) { | |
sliderViewItems = document.querySelector(`.ac-slider--view__slides:nth-child(${sliderLength})`); | |
} | |
// trigger the sliding method | |
slideMe(sliderViewItems, isActiveItem); | |
} | |
arrowRight.addEventListener('click', () => beforeSliding(1)); | |
arrowLeft.addEventListener('click', () => beforeSliding(0)); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment