4 changed files with 117 additions and 74 deletions
@ -1,28 +1,53 @@ |
|||
<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> |
|||
</template> |
|||
|
|||
<script> |
|||
import HelloWorld from './components/HelloWorld.vue' |
|||
|
|||
import Carousel from './components/Carousel'; |
|||
import CarouselSlide from './components/CarouselSlide'; |
|||
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> |
|||
|
|||
<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> |
|||
|
@ -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> |
@ -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> |
@ -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…
Reference in new issue