这篇文章主要为大家详细介绍了移动端滑动切换组件封装 vue-swiper-router实例分析,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!
具体代码如下所述:
代码如下:
<strong>组件部分</strong>
<template>
<div class="main">
<div class="page-tab">
<div
:class="nowPath == item.path ? 'tab-item tab-item_active' : 'tab-item'"
v-for='(item, index) in tabList'
:key="index">
<router-link
mode="out-in"
:to="item.path">{{item.name}}
</router-link>
</div>
</div>
<transition :name="slideDirection">
<slot>
</slot>
</transition>
</div>
</template>
<script>
export default {
props: {
tabList: Array
},
mounted() {
this.nowPath = this.$route.path;
this.initTouchedEvent();
},
data() {
return {
tabSwiper: {},
slideDirection: 'slideforward',
nowPath: '',
startX: '',
startY:''
};
},
methods: {
touchedstartHandler(e) {
this.startX = e.changedTouches[0].pageX;
this.startY = e.changedTouches[0].pageY;
},
touchendHandler(e) {
let direction = this.startX - e.changedTouches[0].pageX;
let directionY = this.startY - e.changedTouches[0].pageY;
let nowRouteIndex = 0;
this.tabList.forEach((v, index) => {
if (v.path == this.nowPath) {
nowRouteIndex = index;
}
});
var disXY = Math.abs(direction)>Math.abs(directionY);
if (disXY&&direction >= 0 && nowRouteIndex < this.tabList.length - 1) {
//设置向前动画
this.slideDirection = 'slideforward';
this.$router.push({'path': this.tabList[nowRouteIndex + 1].path});
}
if (disXY&&direction < 0 && nowRouteIndex > 0) {
//设置向后动画
this.slideDirection = 'slideback';
this.$router.push({'path': this.tabList[nowRouteIndex - 1].path});
}
},
initTouchedEvent() {
this.$el.addEventListener('touchstart', this.touchedstartHandler.bind(this));
this.$el.addEventListener('touchend', this.touchendHandler.bind(this));
},
},
watch: {
'$route' (to, from) {
this.nowPath = to.path;
}
}
};
</script>
<style>
* {
margin: 0;
padding: 0;
}
body {
height: 100%;
width: 100%;
background-color: #fbf9fe;
}
a {
color: #333;
text-decoration: none;
}
.page {
display: flex;
justify-content: center;
align-items: center;
}
.page-tab {
display: flex;
justify-content: center;
}
.tab-item {
text-align: center;
align-items: center;
height: 44px;
line-height: 44px;
flex: 1;
height: 100%;
background-color: #fff;
}
.tab-item_active {
border-bottom: 3px solid #f90;
}
.tab-item_active a {
color: #f90;
}
.slideforward-enter-active, .slideforward-leave-active {
position: absolute;
transition: all .5s;
transform: translate3d(0px, 0px, 0px);
}
.slideforward-enter, .slideforward-leave-to {
position: absolute;
transform: translate3d(200px, 0px, 0px);
}
.slideback-enter-active, .slideback-leave-active {
position: absolute;
transition: all .5s;
transform: translate3d(0px, 0px, 0px);
}
.slideback-enter, .slideback-leave-to {
position: absolute;
transform: translate3d(-200px, 0px, 0px);
}
</style>
<strong>router部分</strong>
import Vue from 'vue';
import Router from 'vue-router';
import Page1 from '@/pages/page1/index';
import Page2 from '@/pages/page2/index';
import Page3 from '@/pages/page3/index';
import Page4 from '@/pages/page4/index';
Vue.use(Router)
export default new Router({
routes: [
{
path: '/',
name: 'index',
component: Page1
},
{
path: '/page2',
name: 'Page2',
component: Page2
},
{
path: '/page3',
name: 'Page3',
component: Page3
},
{
path: '/page4',
name: 'Page4',
component: Page4
}
]
});
<strong>调用组件部分</strong>
<template>
<div id="app">
<TabPages
:tab-list='tabList'>
<router-view/>
</TabPages>
</div>
</template>
<script>
import TabPages from './components/index';
export default {
name: 'app',
data() {
return {
tabList: [{
name: 'tab1',
path: '/'
}, {
name: 'tab2',
path: '/page2'
}, {
name: 'tab3',
path: '/page3'
}, {
name: 'tab4',
path: '/page4'
}]
}
},
components: {
TabPages
}
}
</script>
<style>
</style>
完整代码 --> 代码地址 移动端滑动切换
【图片暂缺】
总结
以上所述是小编给大家介绍的移动端滑动切换组件封装 vue-swiper-router实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
本文来自:http://www.q1010.com/184/6502-0.html
注:关于移动端滑动切换组件封装 vue-swiper-router实例分析的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。
关键词:vue.js
四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。