经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » HTML5 » 查看文章
移动端底部导航固定配合vue-router实现组件切换
来源:cnblogs  作者:Frank丶HQ  时间:2019/6/14 9:38:26  对本文有异议

在我们平时练习或者实际项目中也好,我们常常遇到这么一个需求:移动端中的导航并不是在顶部也不是在底部,而是在最底部且是固定的,当我们点击该导航项时会切换到对应的组件。相信对于很多朋友而言,这是一个很简单的需求,而且市面上有很多开源的组件库就可以实现,像比如说:cube-ui等!那么对于一个要是还在练习以及对第三方组件库不是很了解的朋友不妨看看我这篇,相信会对你有所收获的!

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

  1. HTML 结构
  1. 1 <div>
  2. 2 <div>容器</div>
  3. 3 <div class="footer">
  4. 4 <div class="module-nav">
  5. 5 <div class="nav-i">
  6. 6 <div class="iconfont icon">&#xe610;</div>
  7. 7 <h3>首页</h3>
  8. 8 </div>
  9. 9 <div class="nav-i">
  10. 10 <div class="iconfont icon">&#xe629;</div>
  11. 11 <h3>发现</h3>
  12. 12 </div>
  13. 13 <div class="nav-i">
  14. 14 <div class="iconfont icon-add">&#xe84f;</div>
  15. 15 </div>
  16. 16 <div class="nav-i">
  17. 17 <div class="iconfont icon">&#xe62c;</div>
  18. 18 <h3>消息</h3>
  19. 19 </div>
  20. 20 <div class="nav-i">
  21. 21 <div class="iconfont icon">&#xe601;</div>
  22. 22 <h3>我的</h3>
  23. 23 <div>
  24. 24 </div>
  25. 25 </div>
  26. 26 </div>

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

  1. css 样式( stylus形式
  1. 1 .footer
  2. 2 position fixed
  3. 3 bottom 0
  4. 4 z-index 999
  5. 5 max-width 1080px
  6. 6 width 100%
  7. 7 border-top 1px solid #C0C0C0
  8. 8 .module-nav
  9. 9 display flex
  10. 10 justify-content space-around
  11. 11 .nav-i
  12. 12 width 60px
  13. 13 text-align center
  14. 14 .icon
  15. 15 font-size 35px
  16. 16 padding 5px 0
  17. 17 .icon-add
  18. 18 font-size 60px
  19. 19 h3
  20. 20 font-size 15px
  21. 21 font-weight normal
  22. 22 margin 0
  23. 23 padding-bottom 5px

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

  1. 路由表
  1. 1 routes: [
  2. 2 {
  3. 3 path: "/",
  4. 4 name: "home",
  5. 5 component: Home
  6. 6 },
  7. 7 {
  8. 8 path: "/find",
  9. 9 name: "find",
  10. 10 component: Find
  11. 11 },
  12. 12 {
  13. 13 path: "/info",
  14. 14 name: "info",
  15. 15 component: Info
  16. 16 },
  17. 17 {
  18. 18 path: "/user",
  19. 19 name: "user",
  20. 20 component: User
  21. 21 }
  22. 22 ]

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

  1. 1 // HTML
  2. 2 <div>
  3. 3 <div class="main-content">
  4. 4 <router-view></router-view>
  5. 5 </div>
  6. 6 <div class="footer">
  7. 7 <div class="module-nav">
  8. 8 <router-link tag="div" to="/" class="nav-i">
  9. 9 <div class="iconfont icon">&#xe610;</div>
  10. 10 <h3>首页</h3>
  11. 11 </router-link>
  12. 12 <router-link tag="div" to="/find" class="nav-i">
  13. 13 <div class="iconfont icon">&#xe629;</div>
  14. 14 <h3>发现</h3>
  15. 15 </router-link>
  16. 16 <div class="nav-i">
  17. 17 <div class="iconfont icon-add">&#xe84f;</div>
  18. 18 </div>
  19. 19 <router-link tag="div" to="/info" class="nav-i">
  20. 20 <div class="iconfont icon">&#xe62c;</div>
  21. 21 <h3>消息</h3>
  22. 22 </router-link>
  23. 23 <router-link tag="div" to="/user" class="nav-i">
  24. 24 <div class="iconfont icon">&#xe601;</div>
  25. 25 <h3>我的</h3>
  26. 26 </router-link>
  27. 27 </div>
  28. 28 </div>
  29. 29 </div>
  30. 30
  31. 31 // css
  32. 32 .footer
  33. 33 position fixed
  34. 34 bottom 0
  35. 35 z-index 999
  36. 36 max-width 1080px
  37. 37 width 100%
  38. 38 border-top 1px solid #C0C0C0
  39. 39 .module-nav
  40. 40 display flex
  41. 41 justify-content space-around
  42. 42 .nav-i
  43. 43 width 60px
  44. 44 text-align center
  45. 45 .icon
  46. 46 font-size 35px
  47. 47 padding 5px 0
  48. 48 .icon-add
  49. 49 font-size 60px
  50. 50 h3
  51. 51 font-size 15px
  52. 52 font-weight normal
  53. 53 margin 0
  54. 54 padding-bottom 5px
  55. 55
  56. 56 // router
  57. 57 export default new Router({
  58. 58 routes: [
  59. 59 {
  60. 60 path: "/",
  61. 61 name: "home",
  62. 62 component: Home
  63. 63 },
  64. 64 {
  65. 65 path: "/find",
  66. 66 name: "find",
  67. 67 component: Find
  68. 68 },
  69. 69 {
  70. 70 path: "/info",
  71. 71 name: "info",
  72. 72 component: Info
  73. 73 },
  74. 74 {
  75. 75 path: "/user",
  76. 76 name: "user",
  77. 77 component: User
  78. 78 }
  79. 79 ]
  80. 80 });

 

小事做不好,何以做大事,坚持!

 

原文链接:http://www.cnblogs.com/hq-fighting/p/11017982.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号