索引列表是一种常见的组件,特别适用于长列表的情况,可以方便用户快速定位到列表中的某一部分。在小程序中,你可以使用 scroll-view、view 等组件结合事件监听来实现索引列表组件。以下是一个简单的示例:

1. 创建一个自定义组件目录,例如 components。

2. 在 components 目录下创建一个索引列表组件的文件,例如 index-list。

   - components/index-list/index-list.wxml:
     <scroll-view class="index-scroll" scroll-y="{{true}}" bindscrolltoupper="scrollToUpper" bindscroll="scrollHandler">
       <view class="index-container">
         <view class="index-item" wx:for="{{indexList}}" wx:key="index" data-index="{{index}}" bindtap="jumpToIndex">
           {{item}}
         </view>
       </view>

       <!-- 内容区域 -->
       <view class="content">
         <view class="content-item" wx:for="{{dataList}}" wx:key="index">
           {{item}}
         </view>
       </view>
     </scroll-view>

   - components/index-list/index-list.js:
     Component({
       data: {
         indexList: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
         dataList: [
           { index: 'A', item: 'Apple' },
           { index: 'A', item: 'Avocado' },
           { index: 'B', item: 'Banana' },
           { index: 'C', item: 'Cherry' },
           // 其他数据项...
         ],
         currentIndex: 0,
       },
       methods: {
         scrollToUpper: function () {
           // 滚动到顶部时的逻辑
         },
         scrollHandler: function (e) {
           // 滚动时的逻辑,根据滚动位置更新索引
           // 具体逻辑可以根据实际情况进行调整
           const scrollTop = e.detail.scrollTop;
           const index = Math.floor(scrollTop / 20); // 每个索引项的高度为 20px
           this.setData({
             currentIndex: index,
           });
         },
         jumpToIndex: function (e) {
           // 点击索引项时的逻辑,滚动到相应位置
           const index = e.currentTarget.dataset.index;
           const query = wx.createSelectorQuery().in(this);
           query.select(`#content-item-${index}`).boundingClientRect();
           query.exec((res) => {
             if (res && res[0]) {
               const top = res[0].top;
               this.setData({
                 currentIndex: index,
               });
               wx.pageScrollTo({
                 scrollTop: top,
                 duration: 300,
               });
             }
           });
         },
       },
     });

   - components/index-list/index-list.wxss:
     .index-scroll {
       height: 100vh;
       width: 100%;
       display: flex;
     }

     .index-container {
       width: 20px;
       background-color: #f5f5f5;
       position: fixed;
       top: 0;
       bottom: 0;
       display: flex;
       flex-direction: column;
       align-items: center;
       padding-top: 20px;
     }

     .index-item {
       height: 20px;
       line-height: 20px;
       text-align: center;
       color: #333;
       font-size: 12px;
       margin-bottom: 2px;
       cursor: pointer;
     }

     .content {
       flex: 1;
       padding: 20px;
     }

     .content-item {
       height: 20px;
       line-height: 20px;
       margin-bottom: 10px;
     }

3. 在需要使用索引列表组件的页面中引入该组件。
   <index-list></index-list>

这是一个简单的索引列表组件的示例。在实际开发中,你可能需要根据项目需求对样式和逻辑进行更进一步的定制。在实际开发中,你也可以使用小程序 UI 组件库,这些库通常提供了丰富的索引列表组件,能够简化开发流程。


转载请注明出处:http://www.zyzy.cn/article/detail/1350/微信小程序