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

news/2024/11/8 17:12:07/

这里我们直接使用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.ppmy.cn/news/730836.html

相关文章

AOP案例

1. 案例-测量业务层接口万次执行效率 能描述出环绕通知里面的实现步骤 1.1 需求和分析 需求&#xff1a;任意业务层接口执行均可显示其执行效率&#xff08;执行时长&#xff09; 分析&#xff1a; 1&#xff1a;业务功能&#xff1a;业务层接口执行前后分别记录时间&…

科研绘图中的图片格式问题

本文分析了所有主流图片格式的优缺点。 科研绘图中的图片格式问题 科研论文投稿需要根据期刊的要求上传符合要求的图片&#xff0c;以下为科研绘图中相关格式问题汇总。 1 位图和矢量图的区别 位图&#xff08;Bitmap&#xff09; 又称栅格图&#xff08;Raster graphics&…

李彦宏: 《硅谷商战》 节选

作者&#xff1a;李彦宏 第一回安德森初闯硅谷 克拉克慧眼识才 第二回华尔街新星照耀 西雅图阴雨连绵 第三回闭门造车Oak受挫 借尸还魂Java重生 第四回写一次“跑”遍天下 开赌局二虎对决 第五国领航员踌躇满志 探索者卧薪尝胆 第六回上网服务烽烟骤起 美国在线渐成赢家 第七回…

电脑疑难80问

电脑疑难80问 1、开机黑屏怎么办?指导用户听一下有没有自检的嘀声,如果有,检查一下显示器信号线2.鼠标双击不起作用怎么办?控制面板中鼠标双击速度设置过快.3、如何从网络注销&#xff1f;单击“开始”&#xff0c;然后单击“注销”&#xff0c;单击“是”&#xff0c;然后在…

操作系统及软件常用的日语单词

"Out Look"中的日语单词 メールメッセージ 邮件 ニュースメッセージ 新闻邮件 インスタントメッセージ 即时邮件 フォルダ 文件夹 連絡先 联系人 添付ファイルの保存 保存附件 ひな形として保存 …

防范黑客木马

转自&#xff1a;http://bbs.51testing.com/thread-124374-1-1.html、 即使是很好的实现了TCP/IP协议&#xff0c;由于它本身有着一些不安全的地方&#xff0c;从而可以对TCP/IP网络进行攻击。这些攻击包括序列号欺骗&#xff0c;路由攻击&#xff0c;源地址欺骗和授权欺骗。本…

JavaScript技术

● &运算符_1.htm● JavaScript的脆弱性_1.htm● JavaScript技巧环绕三维文字_1.htm● JavaScript时间显示三大心法_1.htm● Javascript特效欣赏(一)飘雪_1.htm● Java技巧(一)会变色的超链接_1.htm● 弹出式说明窗口---JavaScript的使用_1.htm● 第八讲WEB页面信息交互_…

虚幻引擎 4.9

本发布版本包含了129个重大修改&#xff0c;这些修改由虚幻引擎的令人赞叹的社区开发者提交而来。感谢这些开发者对虚幻引擎4.9的贡献&#xff1a; Andrew Zhilin (zoon), Artem V. Navrotskiy (bozaro), Artyom Sovetnikov, Ben Rog-Wilhelm(zorbathut), Ben Wiklund (bwiklun…