uni-app 左右两侧布局:左侧选项卡,右侧展示内容,并分别实现上拉加载功能

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

uni-app 左右两侧布局:左侧选项卡,右侧展示内容,并分别实现上拉加载功能

类似于https://so.m.jd.com/webportal/channel/m_category?searchFrom=pro这种效果

信息类别 信息内容
开发环境 未提及
版本号 未提及
项目创建方式 未提及
1 回复

uni-app 中实现左右两侧布局,其中左侧为选项卡,右侧展示内容,并分别实现上拉加载功能,可以使用 Vue.js 的组件化开发特性,结合 uni-app 提供的 API 和组件来实现。以下是一个简单的代码示例,展示如何实现这一功能。

首先,创建项目结构:

├── pages
│   ├── index
│   │   ├── index.vue
│   └── ...
├── components
│   ├── TabBar.vue
│   └── Content.vue
├── App.vue
└── main.js

TabBar.vue(左侧选项卡组件)

<template>
  <view class="tab-bar">
    <view v-for="(tab, index) in tabs" :key="index" @click="selectTab(index)">
      {{ tab.name }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { name: 'Tab 1' },
        { name: 'Tab 2' },
        // 更多选项卡
      ],
      selectedTab: 0
    };
  },
  methods: {
    selectTab(index) {
      this.selectedTab = index;
      this.$emit('tab-change', index);
    }
  }
};
</script>

<style scoped>
.tab-bar {
  /* 样式 */
}
</style>

Content.vue(右侧内容组件,支持上拉加载)

<template>
  <scroll-view scroll-y="true" @scrolltolower="loadMore">
    <view v-for="(item, index) in items" :key="index">
      {{ item }}
    </view>
    <view v-if="loading">加载中...</view>
  </scroll-view>
</template>

<script>
export default {
  props: ['initialItems'],
  data() {
    return {
      items: this.initialItems,
      loading: false,
      page: 1
    };
  },
  methods: {
    loadMore() {
      if (this.loading) return;
      this.loading = true;
      // 模拟异步请求
      setTimeout(() => {
        const newItems = Array.from({ length: 10 }, (_, i) => `Item ${this.items.length + i + 1}`);
        this.items = [...this.items, ...newItems];
        this.loading = false;
        this.page += 1;
      }, 1000);
    }
  }
};
</script>

index.vue(主页面,组合 TabBar 和 Content)

<template>
  <view class="container">
    <TabBar @tab-change="handleTabChange" />
    <Content :initialItems="currentItems" />
  </view>
</template>

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

export default {
  components: { TabBar, Content },
  data() {
    return {
      tabsData: [
        { items: Array.from({ length: 10 }, (_, i) => `Tab 1 Item ${i + 1}`) },
        { items: Array.from({ length: 10 }, (_, i) => `Tab 2 Item ${i + 1}`) }
      ],
      currentTabIndex: 0
    };
  },
  computed: {
    currentItems() {
      return this.tabsData[this.currentTabIndex].items;
    }
  },
  methods: {
    handleTabChange(index) {
      this.currentTabIndex = index;
    }
  }
};
</script>

以上代码展示了如何构建左右两侧布局,并实现选项卡切换和上拉加载功能。你可以根据实际需求进一步调整和优化代码。

回到顶部