移动端底部导航固定配合vue-router实现组件切换功能


Posted in Javascript onJune 13, 2019

在我们平时练习或者实际项目中也好,我们常常遇到这么一个需求:移动端中的导航并不是在顶部也不是在底部,而是在最底部且是固定的,当我们点击该导航项时会切换到对应的组件。

相信对于很多朋友而言,这是一个很简单的需求,而且市面上有很多开源的组件库就可以实现,像比如说:cube-ui等!那么对于一个要是还在练习以及对第三方组件库不是很了解的朋友不妨看看我这篇,相信会对你有所收获的!

首先,在实现这个需求之前,我们先分析或者回想下和自己做过的demo中哪个类似,相信很多朋友立马就会想起来---tab栏切换,那么对于HTML结构的设计我们便可以借助tab栏切换的结构:一个大盒子套着两个小盒子,一个作容器,另一个作导航!

HTML 结构

<div>
 <div>容器</div>
 <div class="footer">
  <div class="module-nav">
  <div class="nav-i">
   <div class="iconfont icon"></div>
   <h3>首页</h3>
  </div>
  <div class="nav-i">
   <div class="iconfont icon"></div>
   <h3>发现</h3>
  </div>
  <div class="nav-i">
   <div class="iconfont icon-add"></div>
  </div>
  <div class="nav-i">
   <div class="iconfont icon"></div>
   <h3>消息</h3>
  </div>
  <div class="nav-i">
   <div class="iconfont icon"></div>
   <h3>我的</h3>
  <div>
  </div>
 </div>
 </div>

  做完HTML结构的编写,那我们在给上面的骨架穿上衣服,根据需求“底部固定”,我们很容易便会想到 position: fixed ,当然我这里也是用固定定位实现的,但布局采用的是 flex,在采用 flex 结合固定定位布局的时候常常会出现很多不必要的问题,如:flex 属性失效,两者效果冲突等,原因更多的便是“脱标”导致的,其中更多的便是出现在父元素 flex,子元素 position的时候,这时候可以中间加个div使两者摆脱联系。

  css 样式( stylus形式 )

.footer
 position fixed
 bottom 0
 z-index 999
 max-width 1080px
 width 100%
 border-top 1px solid #C0C0C0
 .module-nav
 display flex
 justify-content space-around
 .nav-i
  width 60px
  text-align center
  .icon
  font-size 35px
  padding 5px 0
  .icon-add
  font-size 60px
  h3
  font-size 15px
  font-weight normal
  margin 0
  padding-bottom 5px

骨架和衣服都做好后,那么大概的雏形就出来了,我们的需求也就实现了一半,剩下的便是组件切换了。这个就简单了,只需要配置下路由表,然后指定跳转便可以了

路由表

routes: [
 {
  path: "/",
  name: "home",
  component: Home
 },
 {
  path: "/find",
  name: "find",
  component: Find
 },
 {
  path: "/info",
  name: "info",
  component: Info
 },
 {
  path: "/user",
  name: "user",
  component: User
 }
 ]

  最后在“容器”内添加router-view即可,下面可以看看完整代码:

// HTML
<div>
 <div class="main-content">
  <router-view></router-view>
 </div>
 <div class="footer">
  <div class="module-nav">
  <router-link tag="div" to="/" class="nav-i">
   <div class="iconfont icon"></div>
   <h3>首页</h3>
  </router-link>
  <router-link tag="div" to="/find" class="nav-i">
   <div class="iconfont icon"></div>
   <h3>发现</h3>
  </router-link>
  <div class="nav-i">
   <div class="iconfont icon-add"></div>
  </div>
  <router-link tag="div" to="/info" class="nav-i">
   <div class="iconfont icon"></div>
   <h3>消息</h3>
  </router-link>
  <router-link tag="div" to="/user" class="nav-i">
   <div class="iconfont icon"></div>
   <h3>我的</h3>
  </router-link>
  </div>
 </div>
 </div>

// css
.footer
 position fixed
 bottom 0
 z-index 999
 max-width 1080px
 width 100%
 border-top 1px solid #C0C0C0
 .module-nav
 display flex
 justify-content space-around
 .nav-i
  width 60px
  text-align center
  .icon
  font-size 35px
  padding 5px 0
  .icon-add
  font-size 60px
  h3
  font-size 15px
  font-weight normal
  margin 0
  padding-bottom 5px

// router
export default new Router({
 routes: [
 {
  path: "/",
  name: "home",
  component: Home
 },
 {
  path: "/find",
  name: "find",
  component: Find
 },
 {
  path: "/info",
  name: "info",
  component: Info
 },
 {
  path: "/user",
  name: "user",
  component: User
 }
 ]
});

总结

以上所述是小编给大家介绍的移动端底部导航固定配合vue-router实现组件切换功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
在视频前插入广告
Nov 20 Javascript
javascript实现动态CSS换肤技术的脚本
Jun 29 Javascript
js中split函数的使用方法说明
Dec 26 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
Mar 28 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
利用D3.js实现最简单的柱状图示例代码
Dec 09 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
Jan 11 Javascript
vue-cli之router基本使用方法详解
Oct 17 Javascript
解析vue、angular深度作用选择器
Sep 11 Javascript
Vue路由对象属性 .meta $route.matched详解
Nov 04 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 #Javascript
vue路由插件之vue-route
Jun 13 #Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 #Javascript
详解vuex之store源码简单解析
Jun 13 #Javascript
vue store之状态管理模式的详细介绍
Jun 13 #Javascript
微信小程序页面间跳转传参方式总结
Jun 13 #Javascript
微信小程序位置授权处理方法
Jun 13 #Javascript
You might like
PHP脚本数据库功能详解(中)
2006/10/09 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
javascript常用的方法分享
2015/07/01 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
Vue仿今日头条实例详解
2018/02/06 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
JavaScript ES2019中的8个新特性详解
2019/02/20 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
实例讲解python函数式编程
2014/06/09 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
pycharm运行scrapy过程图解
2019/11/22 Python
Python版中国省市经纬度
2020/02/11 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
大一自我鉴定范文
2013/10/04 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript