移动端滑动切换组件封装 vue-swiper-router实例详解


Posted in Javascript onNovember 25, 2018

具体代码如下所述:

<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实例详解

 总结

以上所述是小编给大家介绍的移动端滑动切换组件封装 vue-swiper-router实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JavaScript 参考教程
Dec 29 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
JQuery的Ajax跨域请求原理概述及实例
Apr 26 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
javascript实现根据3原色制作颜色选择器的方法
Jul 17 Javascript
AngularJS 防止页面闪烁的方法
Mar 09 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
Oct 18 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
Vue 样式绑定的实现方法
Jan 15 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
Nov 25 #Javascript
vue中tab选项卡的实现思路
Nov 25 #Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 #Javascript
vscode 开发Vue项目的方法步骤
Nov 25 #Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 #Javascript
electron + vue项目实现打印小票功能及实现代码
Nov 25 #Javascript
vue组件实践之可搜索下拉框功能
Nov 25 #Javascript
You might like
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
weex slider实现滑动底部导航功能
2017/08/28 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python控制台输出时刷新当前行内容而不是输出新行的实现
2020/02/21 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
印度民族服装购物网站:BIBA
2019/08/05 全球购物
运动会四百米广播稿
2014/01/19 职场文书
早读迟到检讨书
2014/01/24 职场文书
学生思想表现的评语
2014/01/30 职场文书
运动会入场词50字
2014/02/20 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
python区块链持久化和命令行接口实现简版
2022/05/25 Python