uni-app 有偿求助一个可吸顶和滚动的tab页插件,如下图,能找到插件市场的资源也算

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app 有偿求助一个可吸顶和滚动的tab页插件,如下图,能找到插件市场的资源也算

200R以上,看效果而定

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20210330/dda7ba0ea11b6a604b4d85bcc957c647.gif)
5 回复

有老哥帮忙吗,插件市场类似的也行


不考虑性能的话 自己用swiper写啊

回复 秋凡: 我自己写了一个太卡了

想找一个插件看看

在uni-app中实现一个可吸顶和滚动的Tab页插件,可以通过自定义组件结合uni-app的滚动事件和CSS粘性定位来实现。虽然市场上可能有现成的插件,但这里提供一个基础的实现思路,你可以根据这个思路进行定制或寻找合适的插件。

以下是一个简单的实现示例:

  1. 创建组件:首先,创建一个名为StickyTabs.vue的组件。
<template>
  <view class="tabs-container">
    <scroll-view scroll-y="true" @scroll="onScroll">
      <view class="tabs-header" :style="{ top: stickyTop + 'px' }">
        <view
          v-for="(tab, index) in tabs"
          :key="index"
          class="tab-item"
          @click="selectTab(index)"
          :class="{ active: selectedIndex === index }"
        >
          {{ tab.name }}
        </view>
      </view>
      <view class="tabs-content">
        <slot :name="tabs[selectedIndex].name"></slot>
      </view>
    </scroll-view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { name: 'Tab1' },
        { name: 'Tab2' },
        { name: 'Tab3' },
      ],
      selectedIndex: 0,
      stickyTop: 0,
      lastScrollY: 0,
    };
  },
  methods: {
    onScroll(e) {
      const { scrollTop } = e.detail;
      if (scrollTop > this.lastScrollY) {
        this.stickyTop = this.$refs.header.offsetTop;
      } else if (scrollTop < this.lastScrollY - 50) {
        this.stickyTop = 0;
      }
      this.lastScrollY = scrollTop;
    },
    selectTab(index) {
      this.selectedIndex = index;
    },
  },
};
</script>

<style scoped>
.tabs-container {
  position: relative;
}
.tabs-header {
  position: sticky;
  top: 0;
  background: #fff;
  z-index: 10;
  display: flex;
  justify-content: space-around;
}
.tab-item {
  padding: 10px;
  cursor: pointer;
}
.tab-item.active {
  color: red;
}
.tabs-content {
  padding-top: 50px; /* Adjust based on header height */
}
</style>
  1. 使用组件:在你的页面中使用这个组件,并通过具名插槽提供每个Tab的内容。
<template>
  <sticky-tabs>
    <template v-slot:Tab1>
      <view>Content for Tab 1</view>
    </template>
    <template v-slot:Tab2>
      <view>Content for Tab 2</view>
    </template>
    <template v-slot:Tab3>
      <view>Content for Tab 3</view>
    </template>
  </sticky-tabs>
</template>

<script>
import StickyTabs from '@/components/StickyTabs.vue';

export default {
  components: {
    StickyTabs,
  },
};
</script>

这个示例提供了一个基本的框架,你可以根据需求进行进一步的优化和美化,例如添加动画效果、处理更多Tab等。同时,你也可以在uni-app的插件市场中搜索类似的插件,可能会有现成的解决方案满足你的需求。

回到顶部