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

这里我们直接使用scrollIntoView方法

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

语法

element.scrollIntoView(); // 等同于element.scrollIntoView(true)

element.scrollIntoView(alignToTop); //布尔参数

element.scrollIntoView(scrollIntoViewOptions); //对象参数

组件

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

1688523661676.png

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

字母列表很简单。

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

// 获取26个英文字母大写for (var i = 0; i < 26; i++) {this.letter.push(String.fromCharCode(65 + i))}

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

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

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

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

const peoArray = [{key: "A",list: [{name: "安吉",},{name: "安吉",},],},{key: "B",list: [{name: "爸爸",},{name: "芭比",},],},{key: "C",list: [{name: "蔡徐坤",},{name: "蔡徐坤",},],},]

直接上代码

<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"><divv-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>

完整数据

[{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: "赵一曼",},],},],

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9472.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译Android平台的OpenCV库并启用OpenCL及Contrib

1.下载好OpenCV与OpenCV_Contirb 版本: 4.7 编译主机系统: Ubuntu 20.04 LTS 准备环境与工具: ANDRIOD SDK 与 NDK ,CMAKE ,NINJA ,GCC,G++ ,MAKE 开始编译: ../opencv/platforms/android/build_sdk.py --extra_modules_path=../opencv_contrib/modules --no_samples_bu…

想知道好用的音频翻译软件有哪些?

随着全球化进程的加速和语言交流需求的增长&#xff0c;音频翻译软件正日益受到关注和应用。这样的软件以其高效、准确的翻译能力以及广泛的应用场景赢得了青睐。音频翻译软件具备诸多优势&#xff0c;如通过语音输入实时转化为文字输出&#xff0c;提供了便捷的写作工具&#…

1.监控分布式--zabbix

文章目录 监控分布式-zabbix、prometheus概念工作原理功能组件部署zabbix安装Nginx和PHP环境部署数据库编码安装zabbix编译安装zabbix server客户端安装zabbix agent服务 监控分布式-zabbix、prometheus 利用一个优秀的监控软件&#xff0c;我们可以: 通过一个友好的界面进行…

CTP WEB 100练(1/100)

考点&#xff1a;PHP代码审计 抓包发现source.php&#xff0c;访问下&#xff0c;出现了php代码 代码主体在这部分&#xff0c;满足三个条件&#xff1a;file不为空&file是字符串&checkFile通过 if (! empty($_REQUEST[file])&& is_string($_REQUEST[file])&am…

CentOS Linux的最佳替代方案(一)_Rocky Linux OS 8.6基础安装教程

CentOS Linux的最佳替代方案&#xff08;一&#xff09;_Rocky Linux OS 8.6基础安装教程 一 Rocky Linux介绍和发展历史 Rocky Linux 官网&#xff1a;https://rockylinux.org/ 在CentOS官方宣布停止Centos的维护之后&#xff0c;Centos的创始人Gregory Kurtzer宣布启动新的…

eNSP的使用

目录 配置路由器 DHCP——动态主机配置协议 工作过程&#xff1a; 第一种场景——PC首次获取IP地址的情况 第二种场景——pc&#xff08;客户都&#xff09;再次获取IP地址的情况 DHCP配置&#xff1a; Telnet 搭建好图后 1.看广播域&#xff08;路由器有几个接口就有几…

苹果开发者账号续费流程及苹果开发者账号续费流程及下架处理

已上架的App在AppStore上无法搜索到的问题 在AppStore上搜不到已经上架的应用程序可以采取以下解决办法&#xff1a; 拨打iTunes提供的支持电话&#xff1a;4006-701-855&#xff08;中国时间9:00-17:00&#xff09;。发送邮件给Review团队&#xff0c;在iTunes Connect登录后…

【ARM】-进入和退出异常中断的过程

文章目录 ARM 处理器对异常中断的响应过程从异常中断处理程序中返回 ARM 处理器对异常中断的响应过程 ARM 指令为三级流水线&#xff1a;取地&#xff0c;译码和执行 进入中断的时候 LR PC -4 当出现异常时&#xff0c;ARM 内核自动执行以下操作 将 cpsr 寄存器的值保存到…

vue 访问第三方 跨域, 配置vue.config.js

目录 0 config 文件被修改 一个要重启vscode 配置文件才会生效 1 第一种 (有两种写法) 1.1 配置vue.config.js 1.2 axios 使用 1.3 终端打印 2 第二种方法 --> 错误 --> 没有运行成功 2.1 配置vue.config.js --> 就是api 不被设置成 替换为 / 2.2 axios 使用…

chatGPT如何开启 Browsing 功能,实现即时联网查询?

Openai 为每一个 chatGPT Plus 用户都开放了 Browsing 和 plugins 功能。 前者可以在 ChatGPT 觉得有必要的时候&#xff08;比如你问它今天的新闻&#xff09;&#xff0c;自动联网查询&#xff0c;后者是第三方开发者开发的插件&#xff0c;数量繁多&#xff0c;可以解决各种…

防火墙基本原理详解

概要 防火墙是可信和不可信网络之间的一道屏障&#xff0c;通常用在LAN和WAN之间。它通常放置在转发路径中&#xff0c;目的是让所有数据包都必须由防火墙检查&#xff0c;然后根据策略来决定是丢弃或允许这些数据包通过。例如&#xff1a; 如上图&#xff0c;LAN有一台主机和一…

2023再更新下百度蜘蛛最新UA(User Agent)

其实百度蜘蛛的UA一直没什么变化&#xff0c;有不少朋友以为百度蜘蛛修改特征了&#xff0c;我查了下日志&#xff0c;把最新的UA整理出来给大家。 百度UA信息&#xff1a; Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) 神码ai在了…