移动端底部导航固定配合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 相关文章推荐
Javascript 兼容firefox的一些问题
May 21 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
Jan 11 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
javascript实现网页背景烟花效果的方法
Aug 06 Javascript
JS实现支持多选的遍历下拉列表代码
Aug 20 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
js实现的简单图片浮动效果完整实例
May 10 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
Oct 28 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 Javascript
ES10的13个新特性示例(小结)
Sep 23 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输出缓存(output_buffering)的深入理解
2013/06/13 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
js 分栏效果实现代码
2009/08/29 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
Node.js实现数据推送
2016/04/14 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python实现Dijkstra算法
2018/10/17 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python实现PCA降维的示例详解
2020/02/24 Python
从python读取sql的实例方法
2020/07/21 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
animation和transition的区别
2020/10/12 HTML / CSS
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
实习自我评价怎么写
2013/12/02 职场文书
五年级英语教学反思
2014/01/31 职场文书
小学生安全保证书
2014/02/01 职场文书
小班下学期评语
2014/05/04 职场文书
房地产广告策划方案
2014/05/15 职场文书
调任通知
2015/04/21 职场文书
运动会1000米加油稿
2015/07/21 职场文书
2015年教师节感言
2015/08/03 职场文书
婚礼长辈答谢词
2015/09/29 职场文书