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遍历input取得input的name
Apr 27 Javascript
jQuery EasyUI 的EasyLoader功能介绍
Sep 12 Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
Feb 24 Javascript
JavaScript实现弹出广告功能
Mar 30 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
小程序getLocation需要在app.json中声明permission字段
Apr 04 Javascript
vue控制多行文字展开收起的实现示例
Oct 11 Javascript
js闭包和垃圾回收机制示例详解
Mar 01 Javascript
JS异步堆栈追踪之为什么await胜过Promise
Apr 28 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
是否存在第一台收音机的说法
2021/03/01 无线电
for循环连续求和、九九乘法表代码
2012/02/20 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
2016/03/21 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
javascript通过class来获取元素实现代码
2013/02/20 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
六个窍门助你提高Python运行效率
2015/06/09 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
公司活动策划方案
2014/01/13 职场文书
旷课检讨书3000字
2014/02/04 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
信用卡工资证明范本
2014/10/17 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
家长会主持词开场白
2015/05/29 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
Python3 类型标注支持操作
2021/06/02 Python
js基础语法与maven项目配置教程案例
2021/07/15 Javascript
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL