Slider based on --> http://www.storytrail.co
A Pen by charlie hield on CodePen.
<div id="app"> | |
<div class="buttons"> | |
<button | |
@click="removeSlide" | |
:disabled="slides <= 2" | |
>Remove Slide</button> | |
<button | |
@click="addSlide" | |
:disabled="slides >= 10" | |
>Add Slide</button> | |
</div> | |
<div class="slides"> | |
<transition-group | |
name="slide" | |
mode="out-in" | |
enter-class="slide-in" | |
leave-class="slide-out" | |
enter-active-class="animated slide-in-active" | |
leave-active-class="animated slide-out-active" | |
> | |
<div | |
v-for="index in slides" | |
v-if="index == active" | |
:key="index" | |
> | |
Slide {{ index }} | |
</div> | |
</transition-group> | |
</div> | |
<span | |
class="prev" | |
@click="move(-1)" | |
> | |
<i class="fa fa-chevron-left" aria-hidden="true"></i> | |
</span> | |
<span | |
class="next" | |
@click="move(1)" | |
> | |
<i class="fa fa-chevron-right" aria-hidden="true"></i> | |
</span> | |
<ul class="dots"> | |
<li | |
v-for="(dot, index) in slides" | |
:class="{ active: ++index === active }" | |
@click="jump(index)" | |
></li> | |
</ul> | |
</div> |
/* | |
Slider based on --> http://www.storytrail.co | |
*/ | |
var app = new Vue({ | |
el: '#app', | |
data: { | |
slides: 5, | |
active: 1 | |
}, | |
methods: { | |
move(amount) { | |
let newActive | |
const newIndex = this.active + amount | |
if (newIndex > this.slides) newActive = 1 | |
if (newIndex === 0) newActive = this.slides | |
this.active = newActive || newIndex | |
}, | |
jump(index) { | |
this.active = index | |
}, | |
addSlide() { | |
this.slides = this.slides + 1 | |
}, | |
removeSlide() { | |
this.slides = this.slides - 1 | |
} | |
} | |
}) |
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.1.5/vue.min.js"></script> |
$primary: #221e21; | |
* { | |
margin: 0; | |
padding: 0; | |
box-sizing: border-box; | |
} | |
html, | |
body, | |
#app { | |
height: 100%; | |
} | |
body { | |
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; | |
color: $primary; | |
} | |
.prev, | |
.next { | |
position: absolute; | |
top: 50%; | |
width: 50px; | |
height: 50px; | |
border: 2px solid $primary; | |
color: $primary; | |
border-radius: 50%; | |
margin-top: -25px; | |
margin-left: 25px; | |
cursor: pointer; | |
line-height: 48px; | |
text-align: center; | |
text-indent: -2px; | |
transition: all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); | |
&:hover { | |
background: $primary; | |
color: #fff; | |
transform: scale(1.2); | |
} | |
&:active { | |
transform: translate(0, 3px) scale(1.2); | |
} | |
} | |
.next { | |
right: 0; | |
margin-left: auto; | |
margin-right: 25px; | |
text-indent: 2px; | |
} | |
.dots { | |
position: fixed; | |
display: block; | |
width: 100%; | |
text-align: center; | |
bottom: 20px; | |
li { | |
width: 6px; | |
height: 6px; | |
border-radius: 3px; | |
background: $primary; | |
opacity: 0.2; | |
display: inline-block; | |
margin: 0 3px; | |
cursor: pointer; | |
transition: opacity 0.4s ease-in-out,width 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); | |
&.active { | |
width: 22px; | |
opacity: 1; | |
} | |
} | |
} | |
.slides { | |
font-size: 40px; | |
display: flex; | |
height: 100%; | |
align-items: center; | |
justify-content: center; | |
font-weight: bold; | |
@media (min-width: 600px) { | |
font-size: 80px; | |
} | |
@media (min-width: 900px) { | |
font-size: 140px; | |
} | |
.animated { | |
transition: all 400ms; | |
position: absolute; | |
transform: translate(-50%, -50%); | |
} | |
.slide-in { | |
opacity: 0; | |
transform: translate(-40%, -50%); | |
} | |
.slide-in-active { | |
transition-delay: 150ms; | |
} | |
.slide-out { | |
opacity: 1; | |
} | |
.slide-out-active { | |
opacity: 0; | |
transform: translate(-60%, -50%); | |
} | |
} | |
.buttons { | |
position: absolute; | |
top: 10px; | |
left: 10px; | |
} | |
button { | |
padding: 10px; | |
outline: none; | |
border: none; | |
-webkit-appearance: none; | |
background: $primary; | |
color: #fff; | |
font-weight: bold; | |
font-size: 18px; | |
cursor: pointer; | |
&:disabled { | |
opacity: 0.2; | |
cursor: no-drop; | |
} | |
} |
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> |
Slider based on --> http://www.storytrail.co
A Pen by charlie hield on CodePen.