开始

横向滚动的tab的切换。
image.png
先来看一下官方给我们的模板。选择模板。、
image.png
顶部选项卡下面有一个非原生
image.png
和我们要做很像,我们不会完全的复制它的代码。我们只会用它的样式。
image.png
我们引入的官方的css,它的样式就写在里面。
image.png
新建项目,选择Hello uni-app这个模块,生成的就是例子。
image.png
ctrl+F输入关键字搜索 导航
image.png
顶部选项卡
image.png

  1. {
  2. "path": "tabbar/tabbar",
  3. "style": {
  4. "navigationBarTitleText": "可拖动顶部选项卡"
  5. }
  6. },

找到这个组件的组件代码。
image.png

  1. <scroll-view id="tab-bar" class="scroll-h" :scroll-x="true" :show-scrollbar="false" :scroll-into-view="scrollInto">
  2. <view v-for="(tab,index) in tabBars" :key="tab.id" class="uni-tab-item" :id="tab.id" :data-current="index" @click="ontabtap">
  3. <text class="uni-tab-item-title" :class="tabIndex==index ? 'uni-tab-item-title-active' : ''">{{tab.name}}</text>
  4. </view>
  5. </scroll-view>

image.png

image.png
外面一定要加一个class属性为uni-tab-bar的 view层包裹起来。
image.png

  1. <view class="uni-tab-bar">
  2. <scroll-view scroll-x class="uni-swiper-tab">
  3. <view class="swiper-tab-list"></view>
  4. </scroll-view>
  5. </view>

这里面的view也有class属性
image.png

  1. <view class="uni-tab-bar">
  2. <scroll-view scroll-x class="uni-swiper-tab">
  3. <view class="swiper-tab-list"></view>
  4. </scroll-view>
  5. </view>

这是提供的案例数据
image.png
仿照例子的数据,在自己项目里面造一些数据
image.png

image.png

  1. tabBars: [{
  2. name: "关注",
  3. id: "guanzhu"
  4. },
  5. {
  6. name: "推荐",
  7. id: "tuijian"
  8. },
  9. {
  10. name: "体育",
  11. id: "tiyu"
  12. },
  13. {
  14. name: "热点",
  15. id: "redian"
  16. },
  17. {
  18. name: "财经",
  19. id: "caijing"
  20. },
  21. {
  22. name: "娱乐",
  23. id: "yule"
  24. },
  25. ],

image.png

  1. <scroll-view scroll-x class="uni-swiper-tab">
  2. <block v-for="(tab,index) in tabBars" :key="tab.id">
  3. <view class="swiper-tab-list">
  4. {{tab.name}}
  5. </view>
  6. </block>
  7. </scroll-view>

左右也是可以滚动的。
image.png
拖动的时候,左右带滚动条
image.png
选中的tab,根据索引来标识。
设置换个变量,默认选中第一个。
image.png

  1. tabIndex:0,

当前索引值和设置的相等 就显示active的class属性,标识激活。
image.png

  1. <view class="swiper-tab-list" :class="{'active':tabIndex==index}">
  2. {{tab.name}}
  3. </view>

选中的变蓝色。点击其他的tab是没有用的。
image.png
点击tab的切换事件
image.png

  1. <view class="swiper-tab-list"
  2. :class="{'active':tabIndex==index}"
  3. @tap="tabtap(index)">

image.png

image.png

优化选中的样式

image.png
我们来找一下官方默认的uni.css里面tab的样式
image.png
选中的样式
image.png
吸取文字的颜色
image.png

直接在页面上写
image.png

  1. .swiper-tab-list {
  2. color: #969696;
  3. font-weight: bold;
  4. }

选中的样式

image.png

  1. .swiper-tab-list {
  2. color: #969696;
  3. font-weight: bold;
  4. }
  5. .uni-tab-bar .active{
  6. color: #343434;
  7. }

image.png
选中的下面的黄色线。在下面加一个view组件当做下划线。

image.png
注意这个view是tab的标题下面的

  1. <view class="swiper-tab-line"></view>

吸取下黄色
image.png

image.png

  1. .active .swiper-tab-line{
  2. border-bottom: 6upx solid #FEDE33;
  3. }

image.png
宽度设置的短一点
image.png
image.png
视频中用的margin:auto;但是我在H5和手机真机调试过程中 无法看到黄色的下划线效果。
image.png

  1. .active .swiper-tab-line{
  2. border-bottom: 6upx solid #FEDE33;
  3. width: 70upx;
  4. margin: auto;
  5. border-top: 6upx solid #FEDE33;
  6. border-radius: 20upx;
  7. }

自己修改margin的top和left来达到实际的效果。不能用margin:auto;

  1. .active .swiper-tab-line{
  2. border-bottom: 6upx solid #FEDE33;
  3. width: 70upx;
  4. margin-top: -20upx;
  5. /* margin: auto; */
  6. margin-left: 40upx;
  7. border-top: 6upx solid #FEDE33;
  8. border-radius: 20upx;
  9. }

我的H5下的效果
image.png
我的真机效果
image.png

下面是视频中的截图
image.png

image.png

底部再加一个线
image.png

  1. .uni-swiper-tab{
  2. border-bottom: 1upx solid #EEEEEE;
  3. }

这样横向滚动就实现了
image.png

封装组件

动态页 也会用到这个组件
image.png

下节课再封装!

结束