实现A-Z滑动检索菜单

news2024/9/30 9:33:59

写个这小玩意真麻烦
在这里插入图片描述

<template>
  <div id="letterPeo">
    <!--    <button @click="getasd">获取</button>-->
    <div class="letter">
      <div v-for="(item, index) in letter" :key="index" class="mb-2 item" :class="{active:selectItem == item }" @click="scrollOn(item, index)">
        {{ item }}
      </div>
    </div>

    <div class="peoBox" ref="scrollContainer">
      <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>
</template>

<script>
export default {
  data() {
    return {
      selectItem: "A",
      letter: [],
      peoArray: [
        {key: "A", list: [{name: "安吉"}, {name: "安吉"}]},
        {key: "B", list: [{name: "bar饿啊额日"}, {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: "ID额我热饭v"}]},
        {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: "自发热"}]}
      ]
    };
  },
  computed: {},
  mounted() {
    this.letter = Array.from({length: 26}, (_, i) => String.fromCharCode(65 + i));
    this.$refs.scrollContainer.addEventListener('scroll', this.debounce(this.handleScroll, 200));
  },
  methods: {
    handleScroll(event) {
      const container = document.querySelector('#letterPeo');
      const closestElement = this.getClosestElementToTop(container);
      this.selectItem = closestElement;
    },
    debounce(func, wait) {
      let timeout;
      return function (...args) {
        const later = () => {
          clearTimeout(timeout);
          func.apply(this, args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
      };
    },
    getasd() {
      const container = document.querySelector('#letterPeo');
      const closestElement = this.getClosestElementToTop(container);
      this.selectItem = closestElement;
    },
    getClosestElementToTop(container) {
      const elements = document.querySelectorAll(".peoKey");
      // console.log("container.getBoundingClientRect().top", container.getBoundingClientRect().top);
      let closestElement = null;
      let closestDistance = Infinity;
      for (let element of elements) {
        const rect = element.getBoundingClientRect();
        const distance = Math.abs(rect.top - container.getBoundingClientRect().top);
        // console.log("rect.top", rect.top, distance, distance < closestDistance);
        if (distance < closestDistance) {
          closestDistance = distance;
          closestElement = element;
        }
      }
      return closestElement.innerText;
    },
    scrollOn(item) {
      this.selectItem = item;
      let target = document.getElementById("peo" + item);
      if (target) {
        target.scrollIntoView({behavior: "smooth" /*auto*/});
      }
    },
    // 点击通讯录
    onSelect(item, index) {
      console.log(item, index);
    }
  },
  beforeDestroy() {
    this.$refs.scrollContainer.removeEventListener('scroll', this.debounce(this.handleScroll, 200));
  },
};
</script>

<style lang="scss" scoped>
#letterPeo {
  width: 800px;
  height: 500px;
  display: flex;
  justify-content: space-between;
  overflow-y: auto;
  background: #fff;

  .letter {
    font-size: 12px;
    margin-right: 20px;

    .item {
      padding: 1px;
      cursor: pointer;

      &.active {
        background: pink;
      }
    }
  }

  .peoBox {
    height: 100%;
    overflow-y: auto;
    flex: 1;
    width: 100%;
    padding: 0 10px;

    .peoKey {
      margin: 10px 0;
      font-size: 12px;
      background-color: #f3efef;
    }

    .peolist {
      margin: 20px 0;
    }
  }
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高速接口IO片上SSN分析方法

Gbps信号在当今的高速IO设计中非常常见。由于封装和板上的寄生电感&#xff0c;高速信号在高频下汲取电流&#xff0c;导致大的电源尖峰或骤降。像DDR5这样的并行总线接口有20多个高速IO一起切换&#xff0c;导致同时切换噪声&#xff08;SSN&#xff09;。SSN的不期望的产物是…

苹果手机怎么恢复微信聊天记录?原来这4个方法这么好用

苹果手机的微信聊天记录不见了怎么办&#xff1f;想要解决这个问题&#xff0c;可以先了解一下导致聊天记录消失的原因有哪些。 误触手机&#xff1a;我们有时误触到某个按钮&#xff0c;也可能恢复导致聊天记录消失。卸载微信&#xff1a;卸载微信后&#xff0c;重新安装再打…

国密起步5:GmSSL3交叉编译arm64

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 之前已经建立好了交叉编译环境…

让 Jenkins 到极狐GitLab 的迁移变得更加简单

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;可以私有化部署&#xff0c;对中文的支持非常友好&#xff0c;是专为中国程序员和企业推出的企业级一体化 DevOps 平台&#xff0c;一键就能安装成功。安装详情可以查看官网指南。 文章原文可以点击极狐GitLab 官方资源中心查…

利用短信群发平台时提升短信营销打开率的关键因素

尽管众多企业依赖短信群发平台作为营销手段&#xff0c;但短信的实际打开率往往不尽如人意。以下是几个显著影响短信营销效果的关键因素及其优化策略&#xff1a; 1. 谨慎选择用词&#xff0c;规避敏感词汇 现代智能手机普遍配备了智能拦截功能&#xff0c;对包含特定敏感词汇…

C++宏展开

感觉自己一直对C的宏展开没有细致地研究过&#xff0c;这两天深入地学习了一下&#xff0c;做个笔记。 文章目录 宏展开基本规则宏嵌套展开补充说明参考资料 首先明确宏展开&#xff0c;是在预处理阶段进行的&#xff0c;进入编译期就是宏展开之后的代码了&#xff0c;所以不会…

基于Flask的新冠疫情信息可视化查询系统【案例模板】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 本项目是一个案例学习项目&#xff0c;可以作为新手进行学习系统的框架&#xff0c;本项目有数据库…

Git 学习

一、基本使用 1. 基本理论 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的项目&#xff1b;版本控制是一种记录一个或者若干个文件内容变化&#xff0c;以便来查阅特定版本修订情况的系统 集中化版本控制系统&#xff1a;SVN, CV…

单片机使用cJSON的坑

文章目录 问题解决办法方法一方法二 问题 单片机USAR串口通信我想用json&#xff0c; 我不想用 分隔符的方式。感觉性能够&#xff0c;还有就是方便理解。 mcu型号 : AT32F415系列 雅特力的。 cJSON库: https://github.com/DaveGamble/cJSON/tree/master 只要把 cJSON.h 和 c…

云计算实训39——Harbor仓库的使用、Docker-compose的编排、YAML文件

一、Harbor部署 1.验证python版本 [rootdocker2 ~]#python --version 2.安装pip [rootdocker2 ~]# yum -y install python2-pip #由于版本过低&#xff0c;需要对其进行一个升级 #更新pip [rootdocker2 ~]#pip install --upgrade pip 3.指定版本号 [rootdocker2 ~]# p…

geodatatool(地图资源工具)下载高德数据及数据共享

利用geodatatool&#xff08;地图资源工具&#xff09;3.8&#xff08;新&#xff09;下载高德POI数据&#xff1a; 选择类型如下&#xff1a; 数据效果如下&#xff0c;由于用的免费的key&#xff0c;所以可能数据下载还不完全&#xff0c;但已经很多了&#xff1a; 下载数据…

小模型大智慧!港大重磅开源EasyRec,推荐系统进入语言模型时代

在当今的信息时代&#xff0c;我们每天都被海量信息所包围&#xff0c;不断面临各种选择。从网上购物、音乐播放到视频推荐&#xff0c;推荐系统已经成为我们生活中不可或缺的一部分。那么&#xff0c;这些系统是如何运作的&#xff1f;它们又是如何在信息的洪流中帮助我们找到…

《使用 LangChain 进行大模型应用开发》学习笔记(一)

前言 本文是 Harrison Chase &#xff08;LangChain 创建者&#xff09;和吴恩达&#xff08;Andrew Ng&#xff09;的视频课程《LangChain for LLM Application Development》&#xff08;使用 LangChain 进行大模型应用开发&#xff09;的学习笔记。由于原课程为全英文视频课…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(KNN分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#xff08;KNN分类器&#xff09; 文章目录 一、基本原理原理流程举个例子总结 二、实验结果三、核心代码四、代码获取五、总结 智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#x…

Android 优化之 查找so 文件的来源

序言 有时候我们需要优化apk的包体积大小。比如下面这样的。一个so文件大小有10M。但是我们并不知道so文件是那个库引入的。所以需要研究一下。 方法 在参考网上现有方法&#xff0c;加上自己测试以后。有了下面的成功。而且在gradle 8.4.2都可以成功。相信大家都可以成功。…

MathType常见问题汇总

文章目录 MathType常见问题汇总一、如何将MathType内嵌到WPS工具栏中&#xff1f;二、在word中&#xff0c;如何批量修改所有MathType公式的字体以及大小格式&#xff1f;三、如何解决插入MathType公式后的行间距发生改变&#xff1f;参考 MathType常见问题汇总 一、如何将Mat…

CEASC:基于全局上下文增强的自适应稀疏卷积网络在无人机图像上的快速目标检测

Adaptive Sparse Convolutional Networks with Global Context Enhancement for Faster Object Detection on Drone Images 摘要 提出了一种基于稀疏卷积的探测头优化方法&#xff0c;该方法在精度和效率之间取得了较好的平衡。然而&#xff0c;该算法对微小物体的上下文信息融…

C/C++ JSON ORM

structs #include "json_struct.h" #include <vector>JS_ENUM(Error, None, InvalidRange, IllegalParam, Nullptr, OverLimitLen) JS_ENUM_DECLARE_STRING_PARSER(Error)// 搜索匹配区域 struct RangeContent {size_t start;size_t end;std::strin…

基于协同过滤与情感分析的酒店评论分析与景区推荐系统实现

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍系统界面推荐模块主题分类文本可视化每文一语 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 项目介绍 近年来&#xff0c;旅游行业风生水起&#…

#单片机高级 硬件部分笔记

课程内容 硬件基础知识PCB基础知识嘉立创EDA&#xff08;专业版&#xff09;软件的安装及使用PCB设计PCB设计规则&#xff08;原理图、布局、布线&#xff09;项目&#xff08;暂定&#xff09; 1、硬件基础 初级硬件工程师 熟练掌握数字电路、模拟电路知识&#xff0c;熟悉常用…