微信小程序表格组件(锁头、锁列、样式、字体颜色等)

该博客围绕微信小程序表格组件展开,因微信不支持table组件,通过scroll - view组件实现。提供多种表格样式,可锁头、锁列,能自定义表头和表格样式。2024年3月多次增加功能,如修改表格最大高度、新增表格模式等,还解决了列表左滑列过多时第一列无法锁住的问题,并给出组件代码和demo案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序表格组件(锁头、锁列、样式、字体颜色等)

因为微信不支持table组件,所以通过scroll-view组件来实现一个表格组件。

功能实现:

  1. 提供了三种表格样式
  2. 可以锁头
  3. 可以锁第一列
  4. 自定义表头宽度、高度、背景色、文字大小、字体颜色、是否加粗
  5. 自定义表格宽度、高度
  6. 表格内容的数字是否需要与0判断进行颜色区别(本人做金融,所以需要红绿色)

增加功能(2024年3月19日)

  1. 可以修改表格最大高度(从父组件中动态传值,防止表格高度过小下滑时表头无法固定)
  2. 表格数字可以转换单位
  3. 表格数字可以转成百分百形式

增加功能(2024年3月21日)

  1. 新增表格模式:可以横向或者纵向,用table_sl控制。具体前请见案例
  2. 新增表头点击事件(head_click)和表格行(row_click)点击事件

解决Bug

  1. 解决列表左滑列过多时,第一列无法锁住。(感谢“刘刘大顺ls”大佬提供的建议)

结果展示

注:该demo案例是table_sl为fir模式下
在这里插入图片描述在这里插入图片描述
注:该demo案例是table_sl为sec模式下
在这里插入图片描述在这里插入图片描述

组件代码:

wxml页面:
<!-- 小程序表格
参数说明:
totalHeight:表格最大高度(默认为250px)
table_sl:表格模式(提供两种:'fir'表示横向, 'sec'表示纵向)
line_sl:表格线条样式(提供三种:'all', 'fir', 'sec')
headList: 表头数据
table:表格数据
lock_header:是否锁表头(默认为true,锁头)
lock_first:是否锁第一列(默认为true,锁第一列)
table_width:表格宽度(默认为180rpx)
header_height:表头高度(默认为60rpx)
header_bg:表头背景色(默认为#fff,白色)
header_text_size:表头文字大小(默认为32rpx)
header_bold:表头文字是否加粗(默认为true,加粗)
header_text_color:表头文字颜色(默认为#111,黑色)
cell_height:表格内容高度(默认为100rpx)
is_unit:该列(table_sl='sec'时为行)表格内容(针对数字型|字符串型数字)是否需要转换成"亿,万"单位式
is_per:该列(table_sl='sec'时为行)表格内容(针对数字型|字符串型数字)是否需要转成百分比形式(默认保留两位小数)
注:如果表格内容中的数字不需要做不同标记,则使用字符串类型数字即可(颜色有:默认大于0为red,等于0为gray,小于0为green)
head_click:表头点击事件
row_click:表格行点击事件
-->
<view class="table_box" style="border-width: {
       {
       line_sl=='all'?'':(line_sl=='fir'?'0 0 1rpx 0':'0')}};">
  <scroll-view class="table_scroll" scroll-y scroll-x="{
    {lock_first}}" style="max-height:{
       {
       totalHeight}}px;" bindscrolltolower="handleScrollToLower">
    <!-- 表头部分 -->
    <view class="table_header" style="width: {
       {
       header_width}}rpx;{
       {
       lock_header?'position: sticky': ''}};{
       {
       header_bold?'font-weight: bold': ''}}">
      <view class="table_header_item" style="border-width: {
       {
       line_sl=='all'?'':'0'}};{
       {
       header_style}}" wx:for="{
    {headList}}" wx:key="index">
        <view wx:if="{
    {table_sl=='fir'}}" style="width: {
       {
       table_width[index]?table_width[index]:'180'}}rpx;" data-index="{
    {index}}" data-value="{
    {item}}" bind:tap="head_click">
          <block wx:if="{
    {uts.isArray(item)}}">
            <view style="font-size: {
       {
       header_text_size-4}}rpx;">{
  {item[0]}}</view>
            <view class="endEllipsis">{
  {item[1]}}</view>
          </block>
          <block wx:else>
            {
  {item}}
          </block>
        </view>
        <block wx:else>
          <text wx:if="{
    {index==0}}" style="width: {
       {
       table_width[index]?table_width[index]:'180'}}rpx">{
  {item}}</text>
          <view wx:else class="alignment" style="width: {
       {
       table_width[index]?table_width[index]:'180'}}rpx" data-index="{
    {index}}" data-value="{
    {item}}" bind:tap="head_click">
            <view>
              <view>{
  {item[1]}}</view>
              <view style="font-size: 18rpx; color: gray; font-weight: normal;">{
  {item[0]}}</view>
            </view>
            <text class="arrow" style="margin-left: 10rpx;" />
          </view
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值