Browse Source

kolotoc

master
Patolán 4 years ago
parent
commit
f382a6e858
  1. 57
      src/App.vue
  2. 57
      src/components/Carousel.vue
  3. 19
      src/components/CarouselSlide.vue
  4. 58
      src/components/HelloWorld.vue

57
src/App.vue

@ -1,28 +1,53 @@
<template> <template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<div class="app">
<carousel @next="next" @prev="prev">
<carousel-slide v-for="(slide, index) in slides" :key="slide" :index="index" :visibleSlide = "visibleSlide">
<img :src="slide">
</carousel-slide>
</carousel>
</div> </div>
</template> </template>
<script> <script>
import HelloWorld from './components/HelloWorld.vue'
import Carousel from './components/Carousel';
import CarouselSlide from './components/CarouselSlide';
export default { export default {
name: 'App',
components: {
HelloWorld
components:{
Carousel,
CarouselSlide,
},
data (){
return{
slides: [
'https://picsum.photos/id/232/600/400',
'https://picsum.photos/id/220/600/400',
'https://picsum.photos/id/156/600/400',
],
visibleSlide: 0,
}
},
methods : {
next(){
if(this.visibleSlide >= this.slides.length - 1){
this.visibleSlide = 0;
}else{
this.visibleSlide++;
}
},
prev(){
if(this.visibleSlide <= 0){
this.visibleSlide = this.slides.length - 1;
}else{
this.visibleSlide--;
}
}
} }
} }
</script> </script>
<style> <style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
.app{
display:flex;
justify-content: center;
}
</style> </style>

57
src/components/Carousel.vue

@ -0,0 +1,57 @@
<template>
<div class="carousel">
<slot></slot>
<button @click="next" class="next">Next</button>
<button @click="prev" class="prev">Prev</button>
</div>
</template>
<script>
export default {
data (){
return{
}
},
methods:{
next(){
this.$emit('next')
},
prev(){
this.$emit('prev')
}
}
}
</script>
<style>
.carousel{
position: relative;
width: 600px;
height: 350px;
overflow: hidden;
}
button{
position: absolute;
height: 40px;
width: 50px;
top: calc(50% - 20px);
background-color: red;
border: none;
color: white;
}
button:focus, button:hover{
outline: none;
cursor: pointer;
}
.next{
right: 0;
}
.prev{
left: 0;
}
</style>

19
src/components/CarouselSlide.vue

@ -0,0 +1,19 @@
<template>
<div v-show="visibleSlide === index" class="carousel-slide">
<slot></slot>
</div>
</template>
<script>
export default {
props: ['visibleSlide', 'index'],
data (){
return{
}
}
}
</script>
<style>
</style>

58
src/components/HelloWorld.vue

@ -1,58 +0,0 @@
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<p>
For a guide and recipes on how to configure / customize this project,<br>
check out the
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
</p>
<h3>Installed CLI Plugins</h3>
<ul>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
</ul>
<h3>Essential Links</h3>
<ul>
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
</ul>
<h3>Ecosystem</h3>
<ul>
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
</ul>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
props: {
msg: String
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
Loading…
Cancel
Save