vue自定义底部导航栏Tabbar的实现代码


Posted in Javascript onSeptember 03, 2018

vue自定义底部导航栏Tabbar的实现代码

如图所示,要完成类似的一个底部导航切换。

首先。我们需要分为5个大的VUE文件。可以根据自己的习惯来放在不同的位置。

vue自定义底部导航栏Tabbar的实现代码

我将5个主要的vue文件放在了5个不同的文件夹

然后,在components文件夹里新建Tabbar.vue/以及Item.vue文件

Item.vue文件如下

<template>
 <div class="itemWarp flex_mid" @click='changePage'>
 <span v-show='!bol'>
  <slot name='normalImg'></slot>
 </span>
 <span v-show='bol'>
  <slot name='activeImg'></slot>
 </span>
 <span v-text='txt'></span>
 </div>
</template>
<script type="text/javascript">
 export default{
 name: 'Item',
 props:{
  txt:{
  type:String
  },
  page:{
  type:String
  },
  sel:{
  type:String
  }
 },
 computed:{
  bol: function(){
  if(this.sel == this.page){
   return true;
  }
  return false;
  }
 },
 methods:{
  changePage:function(){
  //点击跳转对应的页面
  this.$router.push('/'+this.page);
  this.$emit('change',this.page)
  }
 }
 }
</script>
<style type="text/css">
 .itemWarp{
 flex-grow: 1;
 display: flex;
 align-items: center;
 justify-content: center;
 flex-direction: column;
 }
 .itemWarp span{
 font-size: 12px;
 }
</style>

Tabbar.vue文件如下

<template>
 <div class="tabberWarp" >
 <div class="warp">
  <Item :txt='item.txt' :page='item.page' @change='getVal' v-for='item in tabbarDes':sel='selected'>
  <img :src="item.normalImg" slot='normalImg'>
  <img :src="item.activeImg" slot='activeImg'>
  </Item>
 </div>
 </div>
</template>
<script type="text/javascript">
 import Item from './Item.vue'
 export default{
 components:{
  Item
 },
 data:function(){
  return{
  selected:'skin',
  tabbarDes:[
   {
   txt:'表情',
   page:'skin',
   normalImg:require('../assets/images/zz_07.jpg'),
   activeImg:require('../assets/images/22_03.jpg')
   
   },  
   {
   txt:'皮肤',
   page:'phiz',
   normalImg:require('../assets/images/download_skin_ic.png'),
   activeImg:require('../assets/images/112_26.jpg')
   },
   {
   txt:'词库',
   page:'thesaurus',
   normalImg:require('../assets/images/zz_09.jpg'),
   activeImg:require('../assets/images/icon2_03.jpg')
   },
   {
   txt:'账号',
   page:'account',
   normalImg:require('../assets/images/zz_11.jpg'),
   activeImg:require('../assets/images/cion_03.jpg')
   },
   {
   txt:'设置',
   page:'setup',
   normalImg:require('../assets/images/zz_13.jpg'),
   activeImg:require('../assets/images/22_03.jpg')
   }
  ]
  }
 },
 methods:{
  getVal:function(res){
  this.selected = res;
  }
 }
 }
</script>
<style type="text/css">
 .warp{
 width: 100%;
 border-top: 1px solid #eee;
 background: #fff;
 display: flex;
 align-items: center;
 justify-content: space-around;
 font-size: 0;
 }
 .warp img{
 width: 20px;
 height: 20px;
 }
 .tabberWarp img{
 margin-top: 10px;
 margin-bottom: 5px;
 }
 .tabberWarp{
 position: fixed;
 bottom: 0;
 left: 0;
 width: 100%;
 padding-bottom: 5px;
 background: #fff;
 }
</style>

Tabbar.vue文件和Item.vue的关系为父子关系.

Tabbar.vue组件 通过v-for循环tabbarDes里面的数据.再通过 props 向下传递数据给子组件.Item.vue能接受到父组件传递的数据.

Item.vue组件绑定点击事件.

this.$router.push('/'+this.page);为跳转到对应的page

this.$emit('change',this.page)为使用$emit 触发父组件的自定义事件 change,将this.page作为参数传递到父组件中.父组件点击获取到传递过来的参数.再通过props传递给item.vue.在computed计算属性中.返回不同的布尔值.来做底部图片的显示隐藏.

最后仅需要在App.vue中引入Tabbar组件即可.

<template>
 <div id="app">
  <router-view></router-view>
  <Tabbar></Tabbar>
  <div class="empty"></div>
 </div>
</template>
<script>
import Tabbar from'./components/tabbar'
export default {
 name: 'app',
 created:function(){
  this.$router.push('/')
 },
 components:{
  Tabbar
 }
}
</script>

总结

以上所述是小编给大家介绍的vue自定义底部导航栏Tabbar的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery实现的淡入淡出二级菜单效果代码
Sep 15 Javascript
jquery判断复选框选中状态以及区分attr和prop
Dec 18 Javascript
JS实战篇之收缩菜单表单布局
Dec 10 Javascript
loading动画特效小结
Jan 22 Javascript
详解vue.js的devtools安装
May 26 Javascript
Jquery EasyUI $.Parser
Jun 02 jQuery
vue cli 全面解析
Feb 28 Javascript
seajs下require书写约定实例分析
May 16 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
微信小程序全选多选效果实现代码解析
Jan 21 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 #Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 #Javascript
vue自定v-model实现表单数据双向绑定问题
Sep 03 #Javascript
详解vue-cli下ESlint 配置说明
Sep 03 #Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 #Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 #Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 #Javascript
You might like
亲密接触PHP之PHP语法学习笔记1
2006/12/17 PHP
php xml文件操作代码(一)
2009/03/20 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php字符串函数学习之substr()
2015/03/27 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
Js 随机数产生6位数字
2010/05/13 Javascript
Jquery中dialog属性小记
2010/09/03 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
python字符串连接方式汇总
2014/08/21 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
大学系主任推荐信范文
2013/12/24 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
药店促销活动策划方案
2014/08/24 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
个人思想政治总结
2015/03/05 职场文书
网络营销实训总结
2015/08/03 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书