uniapp使用scroll-view与swiper组件实现tab滑动切换页面需要注意的问题

简介: ab栏可以滑动,切换页面跟随tab栏同步滑动。这里需要注意的是使用swiper组件时,它会有一个默认的高度,你必须动态的获取数据列表的高度覆盖原来的默认高度。

tab栏可以滑动,切换页面跟随tab栏同步滑动。这里需要注意的是使用swiper组件时,它会有一个默认的高度,你必须动态的获取数据列表的高度覆盖原来的默认高度。


下面是代码


html


<template>
  <view>
          <scroll-view class="scroll1" scroll-x="true">
            <view :class="currentTab==index ? 'select' : ''" :data-current="index" @click="swichNav" v-for="(item,index) in scoll"
             :key='index'>{{item.txt}}
            </view>
          </scroll-view>
          <swiper :current="currentTab" @change="bindChange" class='swp'  :style="{height:aheight?aheight+'px':'auto'}">
            <swiper-item>
              <view class="list-item">
                <view class="list" v-for="(item,index) in list" :key='index'>
                  <view class="list-img">
                    <image :src="item.imgb" mode=""></image>
                  </view>
                  <view class="list-con">
                    <view>{{item.tit}}</view>
                    <view class="list-foot">
                      <view>
                        <image src="../../static/images/user.png" mode="" class="user"></image>
                        <view class="username">{{item.user}}</view>
                      </view>
                      <view>
                        <image src="../../static/images/love.png" mode="" class="like"></image>
                        <view class="likenum">{{item.like}}</view>
                      </view>
                    </view>
                  </view>
                </view>
              </view>
            </swiper-item>
            <swiper-item>玻尿酸</swiper-item>
            <swiper-item>水光针</swiper-item>
            <swiper-item>眼部</swiper-item>
            <swiper-item>鼻部</swiper-item>
            <swiper-item>瘦身塑型</swiper-item>
          </swiper>
        </view>
</template>


js


<script>
export default {
data() {
  return {
      currentTab: 0,
      aheight: '',
      scoll: [{
          txt: '精选'
        }, {
          txt: '玻尿酸'
        }, {
          txt: '水光针'
        }, {
          txt: '眼部'
        }, {
          txt: '鼻部'
        }, {
          txt: '瘦身塑型'
        }],
  }
}
onShow(){
      // 动态获取滑动页面高度
      const query = uni.createSelectorQuery().in(this);
      query.select('.list').boundingClientRect(data => {
          this.aheight = data.height
      }).exec();
    },
methods: {
      // 滑动页面同步tab栏
      bindChange: function(e) {
        this.currentTab = e.detail.current
      },
      //点击tab切换
      swichNav: function(e) {
        var that = this;
        if (this.currentTab === e.target.dataset.current) {
          return false;
        } else {
          this.currentTab = e.target.dataset.current
        }
      }
    }
}
<script>


css


<style scoped lang="less">
.scroll1 {
      width: 100%;
      white-space: nowrap;
      padding: 25rpx 0;
      & view {
        white-space: normal;
        display: inline-block;
      }
      & view:before {
        content: '|';
        color: #f4f4f4;
        margin: 0 30rpx;
      }
      & view:first-child:before {
        display: none;
      }
      .select {
        color: #fb6583;
      }
    }
    .list-item {
      overflow: hidden;
      margin-left: -1%;
      .list {
        float: left;
        width: 48%;
        margin:20rpx 0 0 1%;
        border: solid 1px #eaeaea;
        background-color: #ffffff;
        border-radius: 12rpx;
        .list-img {
          image {
            object-fit: fill;
            width: 100%;
            border-top-left-radius: 12rpx;
            border-top-right-radius: 12rpx;
            height: 364rpx;
          }
        }
        .list-con {
          padding: 15rpx;
          .list-foot {
            margin-top: 20rpx;
            display: flex;
            justify-content: space-between;
            align-items: center;
            &>view {
              font-size: 26rpx;
              display: flex;
              align-items: center;
            }
            .username {
              color: #999999;
              margin-left: 10rpx;
              width: 150rpx;
              overflow: hidden;
              text-overflow: ellipsis;
              white-space: nowrap;
            }
            .user {
              width: 50rpx;
              height: 50rpx;
            }
            .likenum {
              color: #333333;
              margin-left: 10rpx;
            }
            .like {
              width: 28rpx;
              height: 28rpx;
            }
          }
        }
      }
    }
</style>



相关文章
|
1月前
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
39 0
在线课堂+工具组件小程序uniapp移动端源码
|
2月前
|
数据挖掘
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件
158 10
|
2月前
|
搜索推荐 JavaScript 数据可视化
uniapp/vue个性化单选、复选组件
uniapp/vue个性化单选、复选组件
136 5
|
2月前
|
数据可视化 API
低代码可视化-uniapp购物车页面-代码生成器
低代码可视化-uniapp购物车页面-代码生成器
66 1
|
2月前
|
数据可视化 大数据 API
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
低代码可视化开发-uniapp新闻跑马灯组件-代码生成器
140 2
|
2月前
|
存储 API 数据库
uniapp APP自动更新组件
uniapp APP自动更新组件
96 1
|
2月前
|
移动开发 编解码 数据可视化
低代码可视化-uniapp SliderRange区间组件-代码生成器
SliderRange区间组件是一种用户界面元素,允许用户通过拖动滑块选择数值范围。组件支持微信小程序、H5和App,具有高度可定制性、响应式设计和多种事件处理功能。适用于价格筛选、音量调节等场景。代码实现包括滑动区域、滑块、事件处理等部分,支持可视化配置步长、颜色等属性。使用时需注意选择合适步长、提供清晰标签和考虑无障碍设计。
47 0
|
2月前
|
编解码 数据可视化 API
DIY可视化UniApp表格组件
DIY可视化UniApp表格组件
53 0
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
138 7
基于SpringBoot+Vue+uniapp的房屋租赁App的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的汉服交易小程序的详细设计和实现(源码+lw+部署文档+讲解等)
79 7