移动端底部导航固定配合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 相关文章推荐
基于JQuery 的消息提示框效果代码
Jul 31 Javascript
js清理Word格式示例代码
Feb 13 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
Aug 25 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
jQuery实现动态添加tr到table的方法
Dec 26 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
Sep 03 Javascript
Moment.js实现多个同时倒计时
Aug 26 Javascript
vue实现文件上传读取及下载功能
Nov 17 Javascript
Vue scoped及deep使用方法解析
Aug 01 Javascript
vue实现可拖拽的dialog弹框
May 13 Vue.js
后台使用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/11/26 PHP
php在线打包程序源码
2008/07/27 PHP
PHP三元运算符的结合性介绍
2012/01/10 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
Python 自动刷博客浏览量实例代码
2017/06/14 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
pycham查看程序执行的时间方法
2018/11/29 Python
django实现支付宝支付实例讲解
2019/10/17 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Python logging模块原理解析及应用
2020/08/13 Python
通过HTML5规范搞定i、em、b、strong元素的区别
2017/03/04 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
FirstCry阿联酋儿童和婴儿产品网上购物:FirstCry.ae
2021/02/22 全球购物
《美丽的彩虹》教学反思
2014/02/25 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
MySQL kill不掉线程的原因
2021/05/07 MySQL
一文带你探究MySQL中的NULL
2021/11/11 MySQL