vue 仿微信通讯录实现侧边字母快速检索

预览图

实现步骤

  1. 处理后台传来的数据,数据格式化

     pySegSort(arr){
            if (!String.prototype.localeCompare) return null
            // let letters = 'abcdefghjklmnopqrstwxyz'.split('')
            let letters = 'ABCDEFGHJKLMNOPQRSTWXYZ'.split('')
            let zh = '阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀'.split('')
            let segs = []
            letters.forEach((item, i) => {
                let cur = { letter: item, data: [] }
                arr.forEach((item) => {
                    if(item.city.localeCompare(zh[i])>=0&&item.city.localeCompare(zh[i+1])<0){
                        cur.data.push(item)
                    }         
                })
                if (cur.data.length) {   
                        cur.data.sort(function(a, b) {
                            return a.city.localeCompare(b, 'zh')
                        })
                        segs.push(cur)
                    }
            })

            return segs
        },

将数据格式化为以下格式

[
{
    title:'A'
    data:[
        {
            city:'安康市‘,
            id:1
            }
        ]
    },
{
    title:'B'
    data:[
        {
            city:'北京市‘,
            id:2
            }
        ]
    },
    ]
  1. 利用Element.scrollTo()

做滑动效果,需要计算出每个字母标题下数组的长度,计算结果放入一个数组中

 calculateTotalHeight() {
            var list = this.$refs.listGroup
            var height = 0
            this.listHeight.push(height)
            console.log(list.length,'list')
            if(list&&list.length>0){
                for (var i = 0; i < list.length; i++) {
                    var item = list[i]
                    height += item.clientHeight
                    this.listHeight.push(height)
                }
            }
        }
  1. 点击侧边字母滑动到对应字母标题

        goIndex(params) {
            const groupRef = this.$refs.groupRef
            const titleRef = this.$refs.titleRef
            titleRef.map((item,index) => {
            if (item.innerText === params) {
                groupRef.scrollTo(0,this.listHeight[index])
            }
            })
        },

html部分

   <div class="content">
            <div class="top">
                <div style="height: 50%;margin:0 0.4rem">
                    <h5>常用大区</h5>
                    <div class="one">
                        <van-tag class="tagsClass" v-for="(area,index) in regionList" :key="index" @click="choose
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值