写点东西记录一下美好时光,上周学习了一下通过mpuve开发微信小程序,看完文档,就准备撸起袖子加油干的时候,一开始就被支持手势滑动的导航栏给搞懵逼了。求助一波百度和谷歌未果后,只能自己动脑动手!为了给像我一样的小菜鸟,提供一下思路,就记录一下吧!可以优化的地方,请大神不吝赐教。

1.mpvue是什么?

额,这个还是直接看文档:mpvue 官方站点

2.效果预览

不耽误大神时间,没什么亮点,直接上效果图,有兴趣再往下看吧!一切从简。简陋的demo.

3.实战过程

创建示例项目

  1. vue init mpvue/mpvue-quickstart slidebar

先来实现一个TabBar吧,思路和我们平时webTab页是一样,监听点击事件,来回切换。css3动画效果来实现底部滚动条的来回切换。

修改pages/index/index.vuetemplate

  1. <template>
  2. <div>
  3. <div class="navbar">
  4. <block v-for="(item,index) in tabs" :key="index">
  5. <div :id="index" :class="{'navbar_item_on':activeIndex == index}" class="navbar_item" @click="tabClick">
  6. <div class="navbar_title">{{item.name}}</div>
  7. </div>
  8. </block>
  9. <div class="navbar_slider" :class="navbarSliderClass"></div>
  10. </div>
  11. <div>
  12. <div :hidden="activeIndex != 0">选项一的内容</div>
  13. <div :hidden="activeIndex != 1">选项二的内容</div>
  14. <div :hidden="activeIndex != 2">选项三的内容</div>
  15. </div>
  16. </div>
  17. </template>

修改pages/index/index.vuescript

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. tabs: [
  6. {
  7. name: "选项卡1",
  8. type: "1",
  9. checked: true
  10. },
  11. {
  12. name: "选项卡2",
  13. type: "2",
  14. checked: true
  15. },
  16. {
  17. name: "选项卡3",
  18. type: "3",
  19. checked: true
  20. }
  21. ],
  22. activeIndex: 0,
  23. };
  24. },
  25. computed: {
  26. navbarSliderClass() {
  27. if (this.activeIndex == 0) {
  28. return "navbar_slider_0";
  29. }
  30. if (this.activeIndex == 1) {
  31. return "navbar_slider_1";
  32. }
  33. if (this.activeIndex == 2) {
  34. return "navbar_slider_2";
  35. }
  36. },
  37. },
  38. methods: {
  39. tabClick(e) {
  40. this.activeIndex = e.currentTarget.id;
  41. }
  42. },
  43. };
  44. </script>

添加样式:

  1. <style scoped>
  2. .content {
  3. box-sizing: border-box;
  4. height: 100%;
  5. padding-top: 50px;
  6. /* overflow: auto; */
  7. -webkit-overflow-scrolling: touch;
  8. }
  9. .swiper-item {
  10. height: 100%;
  11. text-align: center;
  12. }
  13. .navbar {
  14. display: -webkit-box;
  15. display: -webkit-flex;
  16. display: flex;
  17. position: fixed;
  18. z-index: 500;
  19. top: 0;
  20. height: 50px;
  21. width: 100%;
  22. background-color: #298de5;
  23. border-bottom: 1rpx solid #ccc;
  24. }
  25. .navbar_item {
  26. position: relative;
  27. display: block;
  28. -webkit-box-flex: 1;
  29. -webkit-flex: 1;
  30. flex: 1;
  31. padding: 13px 0;
  32. text-align: center;
  33. font-size: 0;
  34. }
  35. .navbar_item .navbar_item_on {
  36. color: white;
  37. }
  38. .navbar_title {
  39. color: white;
  40. font-weight: 500;
  41. display: inline-block;
  42. font-size: 15px;
  43. max-width: 8em;
  44. width: auto;
  45. overflow: hidden;
  46. text-overflow: ellipsis;
  47. white-space: nowrap;
  48. word-wrap: normal;
  49. }
  50. .navbar_slider {
  51. position: absolute;
  52. content: " ";
  53. left: 0;
  54. bottom: 0;
  55. width: 6em;
  56. height: 3px;
  57. background-color: white;
  58. -webkit-transition: -webkit-transform 0.1s;
  59. transition: -webkit-transform 0.1s;
  60. transition: transform 0.1s;
  61. transition: transform 0.1s, -webkit-transform 0.1s;
  62. }
  63. .navbar_slider_0 {
  64. left: 29rpx;
  65. transform: translateX(0);
  66. }
  67. .navbar_slider_1 {
  68. left: 29rpx;
  69. transform: translateX(250rpx);
  70. }
  71. .navbar_slider_2 {
  72. left: 29rpx;
  73. transform: translateX(500rpx);
  74. }
  75. .controls {
  76. display: -webkit-box;
  77. display: -webkit-flex;
  78. display: flex;
  79. position: fixed;
  80. z-index: 8888;
  81. top: 80;
  82. height: 50px;
  83. width: 100%;
  84. background-color: #298de5;
  85. }
  86. </style>

样式是从mp-vue提取出来的,通过tabClick()方法动态更改当前tabbar选中值,然后通过navbarSliderClass()的滑动底部的滚动条。来看下效果吧!

Tabbar添加手势滑动,接下来改造一下吧,添加手势滑动效果,需要借助小程序的swiper组件来实现。

修改pages/index/index.Vue下的template:

  1. <template>
  2. <div>
  3. <div class="navbar">
  4. <block v-for="(item,index) in tabs" :key="index">
  5. <div :id="index" :class="{'navbar_item_on':activeIndex == index}" class="navbar_item" @click="tabClick">
  6. <div class="navbar_title">{{item.name}}</div>
  7. </div>
  8. </block>
  9. <div class="navbar_slider" :class="navbarSliderClass"></div>
  10. </div>
  11. <swiper class="content" :duration="50" :style="'height:'+contentHeight" @change="swiperChange" :current="currentTab" @animationfinish="onAnimationfinish">
  12. <swiper-item v-for="(item,index) in tabs" :key="index">
  13. <div>{{item.name}}</div>
  14. </swiper-item>
  15. </swiper>
  16. </div>
  17. </template>

修改Script:

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. tabs: [
  6. {
  7. name: "选项卡1",
  8. type: "1",
  9. checked: true
  10. },
  11. {
  12. name: "选项卡2",
  13. type: "2",
  14. checked: true
  15. },
  16. {
  17. name: "选项卡3",
  18. type: "3",
  19. checked: true
  20. }
  21. ],
  22. activeIndex: 0,
  23. currentTab: 0,
  24. winWidth: 0,
  25. winHeight: 0,
  26. };
  27. },
  28. computed: {
  29. navbarSliderClass() {
  30. if (this.activeIndex == 0) {
  31. return "navbar_slider_0";
  32. }
  33. if (this.activeIndex == 1) {
  34. return "navbar_slider_1";
  35. }
  36. if (this.activeIndex == 2) {
  37. return "navbar_slider_2";
  38. }
  39. },
  40. contentHeight() {
  41. return this.winHeight + "px";
  42. }
  43. },
  44. methods: {
  45. tabClick(e) {
  46. this.activeIndex = e.currentTarget.id;
  47. this.currentTab =this.activeIndex;
  48. },
  49. swiperChange(e) {
  50. this.currentTab = e.mp.detail.current;
  51. this.activeIndex = this.currentTab;
  52. },
  53. onAnimationfinish() {
  54. console.log("滑动完成.....")
  55. }
  56. },
  57. onLoad() {
  58. var res = wx.getSystemInfoSync();
  59. this.winWidth = res.windowWidth;
  60. this.winHeight = res.windowHeight;
  61. }
  62. };
  63. </script>

好了,到这里就全部完成了。注意swiper组件必须给他设置一个固定高度,不可以使用height:100%之类的。可以在swiper里嵌套scroll-view实现列表.不过长列表左右滑动有卡顿,暂未知道该如何优化。

mpvue实战-手势滑动导航栏的更多相关文章

  1. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  2. Bootstrap 学习笔记 项目实战 响应式导航栏

    导航代码HTML: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&q ...

  3. 04-Flutter移动电商实战-打通底部导航栏

    关于界面切换以及底栏的实现可参考之前写的一篇文章:Flutter实 ViewPager.bottomNavigationBar界面切换 1.新建4个基本dart文件 在pages目录下,我们新建下面四 ...

  4. html5 横向滑动导航栏

    前提 需要引入: <script src="../assets/js/iscroll.js"></script> v4.2版本 ####html <! ...

  5. js滑动导航栏点击后居中效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. jquery 实现导航栏滑动效果

    精简的代码实现导航栏滑动效果,实现详解: 1.滑块位置:通过父节点position=fixed,子节点position=absolute方式,实现子节点浮动: 2.导航栏居中:通过left=0px,r ...

  7. 【Andord真】SlideMenu+ViewPagerIndictor双滑动边栏+滑动导航条

    采取SlideMenu达到的效果侧边栏: 间 setContentView是设置主背景的布局 setBehindContentView是设置左边菜单的布局 setSecondaryMenu是设置右边的 ...

  8. css3制作炫酷导航栏效果

    今天主要利用hover选择器.鼠标滑过查看效果. 一.普通导航栏 Home Content Service Team Contact 对于这种普通的导航栏,只是鼠标滑过的时候颜色会变,所以思路变得很简 ...

  9. iOS渐变导航栏封装

    由于最近开发的几个项目都有渐变导航栏,每次写的时候都要copy一堆关于导航渐变相关的代码,显得类很冗余,所以花了点时间封装了一个渐变类,直接继承就可以满足大部分需求啦,这里简单写一下心路历程: 渐变的 ...

随机推荐

  1. Multiple annotations found at this line:- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

    解决办法: 右键所在项目 build path configure build path java build path Add Library server Run time (Apache Tom ...

  2. Java并发编程 (十) 多线程并发拓展

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.死锁 1.死锁的定义 所谓的死锁是指两个或两个以上的线程在等待执行的过程中,因为竞争资源而造成的一种 ...

  3. Java实现 洛谷 P1010 幂次方

    输入输出样例 输入 #1 1315 输出 #1 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) import java.util.Scanner; pu ...

  4. 面试三轮我倒在了一道sql题上——sql性能优化

    一.前言 最近小农在找工作,因为今年疫情的特殊原因,导致工作不是特别好找,所以一旦有面试电话,如果可以,都会去试一试,刚好接到一个面试邀请,感觉公司还不错,于是就确定了面试时间,准备了一下就去面试了. ...

  5. SmokePing 快速搭建

    SmokePing介绍 smokeping是来监控IDC机房网络质量情况,可以从监控图上的延时与丢包情况分辨出机房的网络是否稳定,是否为多线,是否为BGP机房以及到各城市的三个运行商网络各是什么情况. ...

  6. Oracle数据迁移后由列的直方图统计信息引起的执行计划异常

    (一)问题背景 在使用impdp进行数据导入的时候,往往在导入表和索引的统计信息的时候,速度非常慢,因此我在使用impdp进行导入时,会使用exclude=table_statistics排除表的统计 ...

  7. SpringBoot爬坑系列

    1.日志篇 现象 由于日志配置采用原来SpringMVC项目中的log4j.properties 文件,日志采用springboot自带的jar包会出现打印不出日志的情况. 解决 引入原日志包 < ...

  8. Android使用OkHttp实现登录注册功能

    客户端 在客户端,这里将登录和注册放在了同一个界面,在账号和密码两个EditText中输入内容后,按下LOGIN按钮,进行登录:按下REGISTER按钮,进行注册. 在写代码之前,先添加OkHttp的 ...

  9. IP组网实验(使用Cisco Packet Tracer路由器模拟软件)

    最近计网课讲到了以太网,第二个计网实验就是IP组网实验.这个实验主要使用了netsim这个路由器模拟软件.怎奈mac上没有,于是用Cisco Packet Tracer进行了一次模拟(其实就是实验中的 ...

  10. 恕我直言你可能真的不会java第2篇:Java Stream API?

    一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...