更新记录

2.0.0(2025-12-04) 下载此版本

优化了, 好用一些了, 增加了注释, 添加了 父级滚动盒子和锚点前缀 属性


平台兼容性

uni-app(3.6.15)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

uni-app x(3.6.15)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

yy-a-z 字母索引,字母索引用去来还是挺丝滑的,剔除[A-Z]中不存在的字母索引

<template>
  <view class="page">
    <view id="home" class="list-wrapper">
      <view
        v-for="section in sectionList"
        :key="section.letter"
        class="section"
      >
        <view
          class="section-title"
          :id="'index_' + section.letter"
        >
          {{ section.letter }}
        </view>
        <view
          v-for="item in section.data"
          :key="item.id"
          class="section-item"
          @tap="onItemTap(item)"
        >
          <view class="item-name">{{ item.name }}</view>
          <view class="item-desc">{{ item.desc }}</view>
        </view>
      </view>
    </view>

    <!-- 右侧 A~Z 索引组件 -->
    <yy-a-z
      :comList="comList"
      @new_list_arr="onNewListArr"
    />
  </view>
</template>

<script>
export default {

  data() {
    return {
      // 原始联系人列表(可以改成接口返回)
      rawList: [
        { id: 1, name: 'Apple 公司',   desc: '科技',     },
        { id: 2, name: '阿里巴巴',     desc: '电商',     },
        { id: 3, name: 'Baidu',       desc: '搜索',     },
        { id: 4, name: 'ByteDance',   desc: '内容平台', },
        { id: 5, name: 'China Mobile',desc: '运营商',   },
        { id: 6, name: '腾讯',        desc: '互联网',   },
        { id: 7, name: '滴滴出行',    desc: '出行',     },
        { id: 8, name: 'JD 京东',     desc: '电商',     },
        { id: 9, name: 'Meituan 美团',desc: '本地生活', },
        { id: 1, name: 'Apple 公司',   desc: '科技',     },
        { id: 2, name: '阿里巴巴',     desc: '电商',     },
        { id: 3, name: 'Baidu',       desc: '搜索',     },
        { id: 4, name: 'ByteDance',   desc: '内容平台', },
        { id: 5, name: 'China Mobile',desc: '运营商',   },
        { id: 6, name: '腾讯',        desc: '互联网',   },
        { id: 7, name: '滴滴出行',    desc: '出行',     },
        { id: 8, name: 'JD 京东',     desc: '电商',     },
        { id: 9, name: 'Meituan 美团',desc: '本地生活', },
        { id: 1, name: 'Apple 公司',   desc: '科技',     },
        { id: 2, name: '阿里巴巴',     desc: '电商',     },
        { id: 3, name: 'Baidu',       desc: '搜索',     },
        { id: 4, name: 'ByteDance',   desc: '内容平台', },
        { id: 5, name: 'China Mobile',desc: '运营商',   },
        { id: 6, name: '腾讯',        desc: '互联网',   },
        { id: 7, name: '滴滴出行',    desc: '出行',     },
        { id: 8, name: 'JD 京东',     desc: '电商',     },
        { id: 9, name: 'Meituan 美团',desc: '本地生活', },
        { id: 1, name: 'Apple 公司',   desc: '科技',     },
        { id: 2, name: '阿里巴巴',     desc: '电商',     },
        { id: 3, name: 'Baidu',       desc: '搜索',     },
        { id: 4, name: 'ByteDance',   desc: '内容平台', },
        { id: 5, name: 'China Mobile',desc: '运营商',   },
        { id: 6, name: '腾讯',        desc: '互联网',   },
        { id: 7, name: '滴滴出行',    desc: '出行',     },
        { id: 8, name: 'JD 京东',     desc: '电商',     },
        { id: 9, name: 'Meituan 美团',desc: '本地生活', },
        { id: 1, name: 'Apple 公司',   desc: '科技',     },
        { id: 2, name: '阿里巴巴',     desc: '电商',     },
        { id: 3, name: 'Baidu',       desc: '搜索',     },
        { id: 4, name: 'ByteDance',   desc: '内容平台', },
        { id: 5, name: 'China Mobile',desc: '运营商',   },
        { id: 6, name: '腾讯',        desc: '互联网',   },
        { id: 7, name: '滴滴出行',    desc: '出行',     },
        { id: 8, name: 'JD 京东',     desc: '电商',     },
        { id: 9, name: 'Meituan 美团',desc: '本地生活', },
      ],

      comList: [],
      sectionList: [],
    }
  },

  onLoad() {
    this.initComList()
  },

  methods: {

    getFirstLetter(name) {
      if (!name) return '#'
      const firstChar = String(name).trim().charAt(0)
      if (/[A-Za-z]/.test(firstChar)) {
        return firstChar.toUpperCase()
      }
      return '#'
    },
    initComList() {
      this.comList = this.rawList.map((item) => ({
        ...item,
        first: this.getFirstLetter(item.name),
      }))
    },

    onNewListArr(list) {
      this.sectionList = list
    },
    onItemTap(item) {
      console.log('点击条目:', item)
      uni.showToast({
        title: item.name,
        icon: 'none',
      })
    },
  },
}
</script>

<style lang="scss">
.page {
  min-height: 100vh;
  background-color: #f5f5f5;
}

.list-wrapper {
  padding: 20rpx 24rpx 40rpx;
}

.section {
  margin-bottom: 24rpx;
}

.section-title {
  font-size: 26rpx;
  font-weight: 700;
  color: #666;
  padding: 10rpx 0;
}

.section-item {
  background: #ffffff;
  padding: 20rpx;
  border-radius: 12rpx;
  margin-top: 10rpx;
  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.04);

  .item-name {
    font-size: 30rpx;
    font-weight: 600;
    color: #222;
    margin-bottom: 6rpx;
  }

  .item-desc {
    font-size: 24rpx;
    color: #888;
  }
}
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。