移动端底部导航固定配合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 相关文章推荐
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
javascript算法学习(直接插入排序)
Apr 12 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
一个php+js实时显示时间问题
Oct 12 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
浅谈js和css内联外联注意事项
Jun 30 Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
微信小程序保持session会话的方法
Mar 20 Javascript
vscode+gulp轻松开发小程序的完整步骤
Oct 18 Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php array_intersect()函数使用代码
2009/01/14 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP array 的加法操作代码
2010/07/24 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
php获取操作系统语言代码
2013/11/04 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
php字符串过滤与替换小结
2015/01/26 PHP
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
javascript基本算法汇总
2016/03/09 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
python基础教程之匿名函数lambda
2017/01/17 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
html5响应式开发自动计算fontSize的方法
2020/01/13 HTML / CSS
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
文明宿舍获奖感言
2014/02/07 职场文书
银行求职信
2014/05/31 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
模范教师事迹材料
2014/12/16 职场文书
员工工作表现自我评价
2015/03/06 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书