This project is a swipe out example built with Vue, Vuetify and Swiper.
- Vue CLI 3 + Webpack + vue-loader for single file Vue components
- Hot-reload in development
- Lint-on-save with ESLint (Standard)
- Stylus CSS preprocessor
- Vuetify a-la-carte (reduce project's size in production)
- Progressive Web App
- App manifest
- Service worker
- Workbox options - Cache Google Fonts
- 100/100 Lighthouse score
Name | Description | |
---|---|---|
swiper | ️Most Modern Mobile Touch Slider | 👆 |
vue | Progressive JavaScript Framework | 🖖 |
vue-cli-3 | ️Standard Tooling for Vue.js Development | 🛠️ |
vuetify | ️Material Component Framework for Vue.js | 📚 |
Name | Description | |
---|---|---|
stylus-loader | CSS preprocessor for webpack | 🎨 |
vue/cli-plugin-babel | Compiler for next generation JavaScript | 🐠 |
vue/cli-plugin-eslint | Pluggable JavaScript linter | ✍️ |
vue/cli-plugin-pwa | JavaScript Library for adding support to PWA | 📱 |
For information on how to use Swiper, visit the official documentation
npm install swiper --save
<!-- App.vue -->
<template>
...
<v-list>
<template v-for="(item, index) in items">
<custom-component
:id="`item-${item}`"
@transitionEnd="customFunction"
...
/>
<v-divider...></v-divider>
</template>
</v-list>
...
</template>
<script>
import CustomComponent from '@/components/CustomComponent.vue'
export default {
components: {
'custom-component': CustomComponent
},
methods: {
transitionEnd () {
// Callback from SwipeoutItem after transition
...
}
}
}
</script>
<!-- CustomComponent.vue -->
<template>
<div :id="id" class="swiper-container">
<div class="swiper-wrapper">
<v-list-tile class="swiper-slide error"></v-list-tile>
<v-list-tile class="swiper-slide">
<!-- custom content here -->
</v-list-tile>
</div>
</div>
</template>
<script>
import 'swiper/dist/css/swiper.min.css'
import { Swiper } from 'swiper/dist/js/swiper.esm.js'
export default {
props: ['id'],
mounted () {
const self = this
const el = '#' + this.id
// Initialize Swiper
const swiper = new Swiper(el, {
initialSlide: 1,
resistanceRatio: 0,
speed: 150
})
// Event will be fired after transition
swiper.on('transitionEnd', function () {
if (this.activeIndex === 0) {
self.$emit('transitionEnd')
// Destroy slider instance and detach all events listeners
this.destroy()
}
})
}
}
</script>
git clone https://github.com/davidgaroro/vuetify-swipeout.git
cd vuetify-swipeout
npm install
npm run serve
npm run build
npm run lint
MIT © davidgaroro