Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >封装一个类似微信通讯录带有字母检索功能的vue组件

封装一个类似微信通讯录带有字母检索功能的vue组件

作者头像
江一铭
发布于 2023-07-11 06:05:20
发布于 2023-07-11 06:05:20
67700
代码可运行
举报
文章被收录于专栏:技术社区技术社区
运行总次数:0
代码可运行

这里我们直接使用scrollIntoView方法

该方法将调用它的元素滚动到浏览器窗口的可见区域

语法

element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); //布尔参数 element.scrollIntoView(scrollIntoViewOptions); //对象参数

组件

分析一下功能就知道很简单了。

首先需要一个通讯录列表,其次是字母列表。

字母列表很简单。

第一种方法:直接用fromCharCode,for循环遍历拿到26个英文字母。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取26个英文字母大写
    for (var i = 0; i < 26; i++) {
      this.letter.push(String.fromCharCode(65 + i))
    }

但是这样的做法,有一个坏处就是,如果通讯录没有这么多呢?

换句话说,如果通讯录只有ABCDEFG这几个首字母的联系人,你把26个都弄上去有点不太合适。

第二种方法:也是相对简单的,直接从通讯录列表拿到字母。当然,这种方法需要后端给你对应的数据结构。并且得让他给你按首字母排序好,毕竟能少一事少一事。什么?他不干?打一顿他就听话了。

当然,我给出的数据结构你可以参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const peoArray = [
        {
          key: "A",
          list: [
            {
              name: "安吉",
            },
            {
              name: "安吉",
            },
          ],
        },
        {
          key: "B",
          list: [
            {
              name: "爸爸",
            },
            {
              name: "芭比",
            },
          ],
        },
        {
          key: "C",
          list: [
            {
              name: "蔡徐坤",
            },
            {
              name: "蔡徐坤",
            },
          ],
        },
 ]

直接上代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div id="letterPeo">
    <!-- 导航栏 -->
    <nav class="navBar" v-if="navBar" :style="{ height: navBarHeight }">头部导航栏</nav>
    <!-- 字母检索 -->
    <div class="letter">
      <div v-for="(item, index) in letter" :key="index" @click="scrollOn(item, index)">
        {{ item }}
      </div>
    </div>

    <!-- 通讯录列表 -->
    <div class="peoBox">
      <div class="peo" ref="box">
        <div
          v-for="(item, index) in peoArray"
          :key="index"
          @click="onSelect(item, index)"
        >
          <p class="peoKey" :id="'peo' + item.key">{{ item.key }}</p>
          <p class="peolist" v-for="(ele, e) in item.list" :key="e">{{ ele.name }}</p>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      navBar: true, //是否开启头部导航
      navBarHeight: "50px", //导航栏高度
      letter: [], //字母检索列表
      peoArray: [],//通讯录列表
    };
  },
  computed: {},
  mounted() {
    // 获取26个英文字母大写
    // for (var i = 0; i < 26; i++) {
    //   this.letter.push(String.fromCharCode(65 + i))
    // }

    // 只获取通讯录字母
    this.peoArray.forEach((ele) => {
      this.letter.push(ele.key);
    });

    //因为有导航栏的原因,默认距离顶部一个导航栏的高度
    if (this.navBar) this.$refs.box.style.marginTop = this.navBarHeight;
  },
  methods: {
    // 字母检索
    scrollOn(item) {
      if (this.navBar) this.$refs.box.style.marginTop = 0; // 开启导航后,上边距默认清零

      let target = document.getElementById("peo" + item); //获取每个字母通讯录对象
      if (target)
        target.scrollIntoView({
          behavior: "smooth", // 定义动画过渡效果, "auto"或 "smooth" 之一。默认为 "auto"
        });

      if (this.navBar) this.$refs.box.style.marginTop = this.navBarHeight; //因为有导航栏的原因,所以上边距应该为导航栏的高度
    },
    // 点击通讯录
    onSelect(item, index) {
      console.log(item, index);
    },
  },
};
</script>

<style scoped>
#letterPeo {
  width: 100%;
}
/* 导航栏 */
.navBar {
  width: 100%;
  position: fixed;
  text-align: center;
  line-height: 50px;
  background: #abf0ff;
  z-index: 3;
}
/* 字母 */
.letter {
  position: fixed;
  right: 10px;
  top: 15%;
  z-index: 2;
}
/* 通讯录 */
.peoBox {
  position: relative;
}

.peo {
  width: 100%;
  overflow-y: scroll;
  position: absolute;
}
.peo p{
    padding: 0 10px;
}
.peo .peoKey {
  margin: 10px 0;
  font-size: 12px;
  background-color: #f3efef;
}
.peolist {
  margin: 20px 0;
}
</style>

完整数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
        {
          key: "A",
          list: [
            {
              name: "安吉",
            },
            {
              name: "安吉",
            },
          ],
        },
        {
          key: "B",
          list: [
            {
              name: "爸爸",
            },
            {
              name: "芭比",
            },
          ],
        },
        {
          key: "C",
          list: [
            {
              name: "蔡徐坤",
            },
            {
              name: "蔡徐坤",
            },
          ],
        },
        {
          key: "D",
          list: [
            {
              name: "打飞机",
            },
          ],
        },
        {
          key: "E",
          list: [
            {
              name: "饿了么",
            },
          ],
        },
        {
          key: "F",
          list: [
            {
              name: "方慧",
            },
          ],
        },
        {
          key: "G",
          list: [
            {
              name: "哥哥",
            },
          ],
        },
        {
          key: "H",
          list: [
            {
              name: "黄老头",
            },
          ],
        },
        {
          key: "I",
          list: [
            {
              name: "ikun",
            },
          ],
        },
        {
          key: "J",
          list: [
            {
              name: "接化发",
            },
          ],
        },
        {
          key: "K",
          list: [
            {
              name: "KFC",
            },
          ],
        },
        {
          key: "L",
          list: [
            {
              name: "刘老根",
            },
          ],
        },
        {
          key: "M",
          list: [
            {
              name: "没读书",
            },
          ],
        },
        {
          key: "N",
          list: [
            {
              name: "牛头人",
            },
          ],
        },
        {
          key: "O",
          list: [
            {
              name: "O泡果奶",
            },
          ],
        },
        {
          key: "P",
          list: [
            {
              name: "嫖老头",
            },
          ],
        },
        {
          key: "Q",
          list: [
            {
              name: "秦三儿",
            },
          ],
        },
        {
          key: "R",
          list: [
            {
              name: "日",
            },
          ],
        },
        {
          key: "S",
          list: [
            {
              name: "塞班",
            },
          ],
        },
        {
          key: "T",
          list: [
            {
              name: "糖糖",
            },
          ],
        },
        {
          key: "U",
          list: [
            {
              name: "U哈哈哈哈",
            },
          ],
        },
        {
          key: "V",
          list: [
            {
              name: "V ME 50",
            },
          ],
        },
        {
          key: "W",
          list: [
            {
              name: "王富贵",
            },
          ],
        },
        {
          key: "X",
          list: [
            {
              name: "喜羊羊",
            },
          ],
        },
        {
          key: "Y",
          list: [
            {
              name: "阳顶天",
            },
          ],
        },
        {
          key: "Z",
          list: [
            {
              name: "赵一曼",
            },
          ],
        },
      ],
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
加密门禁卡复制
最近发现补一张要50,成本的话白卡2块钱一张,读卡器可以白嫖也可以24多买一个不带壳pn532模块。
全栈程序员站长
2022/09/12
4.5K0
再也不怕丢三落四了,教你复制门禁卡
前段时间又又又又因为门禁卡的问题没进去小区门,遂决定多复制几张方便随身携带。对该过程进行整理,希望能帮到同样丢三落四的小朋友们。
FB客服
2020/08/07
9.7K0
再也不怕丢三落四了,教你复制门禁卡
小米nfc模拟加密门禁卡详细图文教程(实测可用)—————– IC ID CUID卡区别
ID卡全称身份识别卡,是一种不可写入的感应卡,含固定的编号。频率是125KHz,属于低频。一般用于门禁。
全栈程序员站长
2022/08/22
39.6K0
小米nfc模拟加密门禁卡详细图文教程(实测可用)—————– IC ID CUID卡区别
RFID技术|门禁卡破解|IC卡破解学习过程
安全不仅仅包含网络上的安全,在我们实际生活中也同样存在很多个安全相关的事物,可以说跟科技扯上关系的事物都会有安全问题,无线,蓝牙,手机,无人机,汽车。真正有问题的不是安全,而是人心。很多事物的设计之初都是没有考虑安全问题的,因为人心的不坏好意迫使去考虑它的安全问题。
安恒网络空间安全讲武堂
2018/08/17
113K2
手机手环nfc模拟加密门禁卡
手上的小米手环4 NFC版吃灰好久了,拿出来试一试其模拟门禁卡功能,希望到现在了应该能有所突破(比如可以模拟一些加密IC卡)。
ghostsf
2022/09/09
2.5K0
手机手环nfc模拟加密门禁卡
记录一次无加密门禁卡手机nfc复制过程
虽然小米说它的手机可以复制门禁卡,但是加密卡它不让复制,就连完全没有加密的门禁卡也无法复制,
全栈程序员站长
2022/09/01
4.8K0
Proxmark3 PM3 简单入门操作
偶然在 c0sMx 的博文中看到有关 Proxmark3 的相关科普文章,对这方面比较感兴趣,了解到身边也有这类需求随即购买了 pm3 实践探讨一下..
2Broear
2024/03/12
3.3K2
Proxmark3 PM3 简单入门操作
如何利用Nexus 5伪造一张门禁卡
以前在社区看见各种关于RFID的帖子,但是一直没花时间尝试。 近期物业重新安装了小区大门,以前绕一绕,或者钻一下还是能进去的- -, 然而物业说,门禁卡最多只能办五张,有人说假装掉了重新去办五张.
逸鹏
2018/04/10
2.9K0
如何利用Nexus 5伪造一张门禁卡
手把手教你如何将学校饭卡复制到小米手环NFC版上
NFC是Near Field Communication缩写,即近距离无线通讯技术。由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC功能提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。
FB客服
2020/03/03
14.2K0
【实战】RFID Hacking(1):看我如何突破门禁潜入FreeBuf大本营
某天,偶然间拿到了FreeBuf Pnig0s同学的工卡信息,终于有机会去做一些羞羞的事情了ಥ_ಥ…… … 事了拂衣去,深藏功与名…… 引子 以下故事纯属虚构,如有雷同,纯属巧合。 我应聘了一个大型
用户1631416
2018/04/12
4.7K0
【实战】RFID Hacking(1):看我如何突破门禁潜入FreeBuf大本营
RFID 破解基础详解
在我们平时生活中有各种各样的卡,比如 ID 卡、IC 卡、RFID 卡、NFC 卡、Mifare 系列卡(可能银行卡、公交卡、饭卡、水卡、门禁卡、电梯卡......我们更亲切些)这么多称呼是不是把自己都搞糊涂了?最重要的还是卡的安全问题像贩卖水卡、盗刷银行卡这些安全问题我们可能都有所耳闻,然后我就这方面进行了简单的学习和实践测试。在网上查资料的时候发现了很多相关文章,但什么还要再写呢?因为这些技术虽然比较古老,但是对像我这种刚接触的新人还是感觉很新奇的,所以就想把自己了解到的一些知识尽可能全面地写出来和大家分享一下,一来是为了整理一下自己所得,二来也希望能够给刚接触这方面的同学一些参考。因此有什么写得不对的地方敬请大家原谅和指出!有什么学习建议也欢迎提出。
信安之路
2019/08/20
7.8K0
RFID 破解基础详解
安卓手机NFC模拟门禁卡(设置UID)的一种方法
本文通过对Android源码中NFC部分的简单分析,实现了另外一种设置UID的方式,可用于部分场景下的门禁卡模拟。
FB客服
2019/05/09
18.8K0
安卓手机NFC模拟门禁卡(设置UID)的一种方法
RFID实战应用之常见射频卡扇区数据分析及破解
上篇文章我们已经介绍了ID卡的工作原理与破解方法。这篇文章在此介绍IC卡的原理及破解方法。IC不同于ID卡的是其卡内数据不仅仅是一串写死的ID序列号,其内部有扇区以储存IC卡内包含的大量数据,且可经过反复擦写。即IC卡可支持读取与写入。IC卡可以分为:接触式IC卡、非接触式IC卡和双界面IC卡。
FB客服
2020/04/21
8.6K0
RFID实战应用之常见射频卡扇区数据分析及破解
低成本安全硬件(二) | RFID on PN532
引言 鉴于硬件安全对于大多数新人是较少接触的,而这方面又非常吸引我,但是部分专业安全研究设备较高的价格使人望而却步。在该系列中,笔者希望对此感兴趣的读者在花费较少金钱的情况下体会到硬件安全的魅力所在。 本系列计划分成四个部分:BadUSB on Arduino; RFID on PN532; GSM on Motorola C118 ; SDR on RTL2832U(电视棒)。 背景 早在2007年,Mifare M1 RFID卡片就被研究人员破解了出来。NXP公司在M1卡上使用了未公开的加密算法,然而密
FB客服
2018/02/23
4.3K0
低成本安全硬件(二) | RFID on PN532
手把手教你用手机代替门禁卡
手机上的IC卡读写编辑软件,搭配蓝牙读卡器或者OTG读卡器,可实现在手机上破解、复制门禁卡,是本文的主角。
知识与交流
2021/07/14
3.6K1
小米手环4/5 NFC添加加密门禁卡
近场通信技术(Near-field communication,NFC)由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体)、诺基亚和索尼共同于2004年研制开发,其基础是RFID及互连技术。近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。当前近场通信已通过成为ISO/IEC IS 18092国际标准、EMCA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。
逍遥子大表哥
2021/12/19
5.1K0
小米手环4/5 NFC添加加密门禁卡
M Tools:移动端rfid校验计算工具
Mifare Classic card 提供 1k-4k 的容量,我们经常见到的是 Mifare Classic 1k(S50),也就是所谓的 M1 卡。M1 卡有从 0 到 15 共 16 个扇区,每个扇区配备了从 0 到 3 共块个段,每个段分为 b0 到 b15 共 16 个区块,并且可以保存 16 字节的内容。
FB客服
2019/05/09
2.1K0
M Tools:移动端rfid校验计算工具
id门禁卡复制到手机_门禁卡复制到苹果手机
1、首先读取卡的ID,并安装“NFC TagInfo”,打开手机的NFC设置,门禁卡贴到手机后盖NFC部分,“NFC TagInfo”读取校园卡ID。可以看到“我的卡”ID号码。
全栈程序员站长
2022/08/14
5.6K0
nfc怎么复制门禁卡,有什么操作教程吗「建议收藏」
现在居住小区很多都有门禁,也是为了提升一个更安全的居住环境,在忙碌的生活中,人们有时会忘记带手机、钥匙、门禁卡等,像忘记门禁卡,会导致进不了小区,这时候该怎么办呢,操作教程。
全栈程序员站长
2022/08/18
12K0
nfc怎么复制门禁卡,有什么操作教程吗「建议收藏」
nfc怎么复制门禁卡,相关教程在这里
  在生活中小区、学校都有门禁的,为了保证安全,每一次都要刷门禁卡才能进去,但有时忘记了或者丢了怎么办呢,拉下来看看相关教程。
全栈程序员站长
2022/08/26
21.1K0
推荐阅读
相关推荐
加密门禁卡复制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验