笔记列表页面布局

这是现在小程序中实际用到的列表页面,请看真实的笔记列表页面需求:

页面包含三部分,广告、内容介绍、笔记列表。其中,广告占页面高度 260rpx,内容介绍高度 200rpx,笔记列表是一个卡片列表,卡片内容分为上下两部分,上部分是标题,下部分是标签,标签可以有多个,一行内显示,两个标签之间要留有间隙。当列表内容很多,一个屏幕无法显示出来时,要可以滑动查看列表内容。滑动时,上方的广告不滑动,内容介绍和笔记列表进行滑动,显示最新内容。

主题样式为 WEUI,但是标签为蓝色。

广告为 Banner 广告,高度为 120px,如果转换为 rpx 大概为 240rpx。所以广告上下可以留一些间隙。

内容介绍是卡片样式,分为上下两部分,上方为项目标题,介绍这个笔记列表归属哪个项目,下方是内容介绍,介绍这个项目是什么。

笔记列表的内容,为该项目从想法到实现的全部内容,每个文件都是一段内容,介绍想法、布局、实现、部署等等。以 Markdown 文件为载体,在列表页面只显示文件的标题,和人为绑定的标签,标签可以为多个,例如想法、开发、部署等,当为开发时,可以牵涉到使用什么语言,例如 Go、Js 等。

当我们了解了需求之后,可以发现这个通过 flex 布局可以很好的实现。

其中页面 WXML 如下:

<view class="container">
  <!-- 广告部分 - 固定不滚动 -->
  <view class="ad-container">
    <ad unit-id="your-ad-unit-id" class="banner-ad"></ad>
  </view>

  <!-- 可滚动区域 -->
  <scroll-view class="scroll-area" scroll-y>
    <!-- 内容介绍部分 -->
    <view class="content-intro">
      <view class="intro-title">{{projectTitle}}</view>
      <view class="intro-description">{{projectDescription}}</view>
    </view>

    <!-- 笔记列表 -->
    <view class="note-list">
      <block wx:for="{{notes}}" wx:key="id">
        <view class="note-card" bindtap="onNoteTap" data-id="{{item.id}}">
          <view class="note-title">{{item.title}}</view>
          <view class="note-tags">
            <block wx:for="{{item.tags}}" wx:key="*this">
              <view class="tag">{{item}}</view>
            </block>
          </view>
        </view>
      </block>
    </view>
  </scroll-view>
</view>

样式 WXSS 如下:

/* 使用WEUI基础样式 */
@import '/path/to/weui.wxss';

.container {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

/* 广告区域 */
.ad-container {
  height: 260rpx;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #f8f8f8;
}

.banner-ad {
  width: 100%;
  height: 240rpx;
}

/* 可滚动区域 */
.scroll-area {
  flex: 1;
}

/* 内容介绍 */
.content-intro {
  background-color: #fff;
  padding: 20rpx 30rpx;
  margin: 10rpx 20rpx;
  border-radius: 8rpx;
  box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}

.intro-title {
  font-size: 36rpx;
  font-weight: bold;
  margin-bottom: 15rpx;
  color: #333;
}

.intro-description {
  font-size: 28rpx;
  color: #666;
  line-height: 1.5;
}

/* 笔记列表 */
.note-list {
  padding: 20rpx;
}

.note-card {
  background-color: #fff;
  padding: 25rpx;
  margin-bottom: 20rpx;
  border-radius: 8rpx;
  box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}

.note-title {
  font-size: 32rpx;
  font-weight: 500;
  margin-bottom: 15rpx;
  color: #333;
}

.note-tags {
  display: flex;
  flex-wrap: wrap;
}

.tag {
  background-color: #1aad19; /* WEUI绿色 */
  color: white;
  font-size: 24rpx;
  padding: 5rpx 15rpx;
  border-radius: 20rpx;
  margin-right: 10rpx;
  margin-bottom: 5rpx;
}

/* 修改标签为蓝色 */
.tag {
  background-color: #10aeff;
}

数据 JS 内容如下:

Page({
  data: {
    projectTitle: '项目开发笔记',
    projectDescription: '本项目记录从构思到实现的全过程,包含需求分析、技术选型、开发过程和部署方案等内容。',
    notes: [
      {
        id: 1,
        title: '项目构思与需求分析',
        tags: ['想法', '规划']
      },
      {
        id: 2,
        title: '技术选型与架构设计',
        tags: ['设计', '架构']
      },
      {
        id: 3,
        title: '前端界面开发',
        tags: ['开发', 'Js', '小程序']
      },
      {
        id: 4,
        title: '后端API开发',
        tags: ['开发', 'Go', 'API']
      },
      {
        id: 5,
        title: '测试与调试',
        tags: ['测试', '调试']
      },
      {
        id: 6,
        title: '部署上线方案',
        tags: ['部署', '运维']
      }
    ]
  },

  onNoteTap: function(e) {
    const noteId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/note-detail/note-detail?id=${noteId}`
    });
  },

  onLoad: function() {
    // 可以在这里加载实际数据
  }
});