移动端滑动切换组件封装 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 中文字符串处理额外注意事项
Nov 15 Javascript
jQuery中on()方法用法实例详解
Feb 06 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
AngularJS中watch监听用法分析
Nov 04 Javascript
浅谈js函数的多种定义方法与区别
Nov 29 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
Jan 12 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
jQuery中的deferred使用方法
Mar 27 jQuery
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
javascript实现下拉菜单效果
Feb 09 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
php5 mysql分页实例代码
2008/04/10 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
一个PHP针对数字的加密解密类
2014/03/20 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
js实现列表按字母排序
2020/08/11 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
Python中的集合类型知识讲解
2015/08/19 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python自动化运维和部署项目工具Fabric使用实例
2016/09/18 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
大学活动总结模板
2014/07/10 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
美丽人生观后感
2015/06/03 职场文书
学校安全管理制度
2015/08/06 职场文书
消防安全培训工作总结
2015/10/23 职场文书
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL