移动端滑动切换组件封装 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 相关文章推荐
关于实现代码语法标亮 dp.SyntaxHighlighter
Feb 02 Javascript
JQuery的read函数与js的onload不同方式实现
Mar 18 Javascript
怎么选择Javascript框架(Javascript Framework)
Nov 22 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
简单实现js进度条加载效果
Mar 25 Javascript
JS中跳出循环的示例代码
Sep 14 Javascript
基于Vue实现拖拽功能
Jul 29 Javascript
BootStrap modal实现拖拽功能
Dec 01 Javascript
详解小程序循环require之坑
Mar 08 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
js里面的变量范围分享
Jul 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网上调查系统
2006/10/09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
js实现抽奖效果
2017/03/27 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
python实现最长公共子序列
2018/05/22 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python标准库OS模块详解
2020/03/10 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
美国知名的时尚购物网站:Anthropologie
2016/12/22 全球购物
手机配件第一品牌:ZAGG
2017/05/28 全球购物
保送生自荐信范文
2013/10/06 职场文书
学习雷锋倡议书
2014/04/15 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
分公司负责人任命书
2014/06/04 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
python自动化八大定位元素讲解
2021/07/09 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android