js实现做通讯录的索引滑动显示效果和滑动显示锚点效果

要实现通讯录的索引滑动显示效果和滑动显示锚点效果,可以按照以下步骤进行操作:

1. 准备工作

首先,需要准备数据及页面布局。比如,我们可以根据姓名的拼音首字母来进行分类,将每个拼音首字母作为一个类别,同时将对应的姓名数据添加在该类别下。然后,我们需要在页面上展示这些数据,并实现拼音首字母索引的滑动效果。

在 HTML 页面中,可以按照如下结构布局:

<div class="contacts-wrapper">
  <div class="index-bar">
    <ul>
      <li><a href="#A">A</a></li>
      <li><a href="#B">B</a></li>
      <li><a href="#C">C</a></li>
      ...
    </ul>
  </div>
  <div class="contact-list">
    <ul class="A">
      <li>...</li>
      <li>...</li>
      ...
    </ul>
    <ul class="B">
      <li>...</li>
      <li>...</li>
      ...
    </ul>
    <ul class="C">
      <li>...</li>
      <li>...</li>
      ...
    </ul>
    ...
  </div>
</div>

其中,index-bar 是拼音首字母索引栏,contact-list 是联系人列表栏,每个 ul 标签是一个大类别,li 标签是具体的联系人信息。这里使用类名为 ABC 等来与索引栏中的链接一一对应。

2. 实现拼音首字母索引的滑动效果

为了实现滑动索引功能,需要对索引栏进行事件绑定,具体步骤如下:

  1. 在 JavaScript 中获取索引栏的 ul 元素和 li 元素。
  2. 遍历 li 元素,获取其 href 属性值,将其存储作为一个数组。
  3. 给每个 li 元素绑定一个 click 事件,点击时根据 href 属性值来跳转到对应的大类别 ul 标签中。
  4. 给索引栏 ul 绑定一个 touchstart 事件,当用户开始触摸时,获取 touchstart 的触点位置,并计算当前位置应该在哪一个索引位置,并将该位置得到 li 标签样式高亮。
  5. 给索引栏 ul 绑定一个 touchmove 事件,当用户滑动时,根据触点位置计算当前位置应该在哪一个索引位置,并将该位置得到 li 标签样式高亮。需要注意的是,在 touchmove 事件中需要使用 event.preventDefault() 阻止页面的默认滚动行为。
  6. 给索引栏 ul 绑定一个 touchend 事件,当用户停止触摸时,将得到高亮样式的 li 标签的索引位置作为参数,计算应该滚动到哪一个大类别的位置,并使用 animate 进行页面滚动。

下面是代码示例:

// 获取索引栏的 ul 元素和 li 元素
var indexBar = document.querySelector('.index-bar');
var indexLinks = document.querySelectorAll('.index-bar li a');

// 给每个 a 标签绑定 click 事件
for (var i = 0; i < indexLinks.length; i++) {
   indexLinks[i].addEventListener('click', function (event) {
      // 取消页面默认事件
      event.preventDefault();

      var href = this.getAttribute('href');
      var target = document.querySelector(href);
      var position = target.offsetTop;
      // 通过 animate 实现滚动效果
      $('html, body').animate({ scrollTop: position }, 300);
   });
}

// 给索引栏 ul 元素绑定 touch 事件
indexBar.addEventListener('touchstart', function (event) {
    event.preventDefault();
    var touches = event.touches[0];
    var index = Math.floor((touches.pageY - this.offsetTop) / 15);
    // 获取对应的 li 标签,并设置样式高亮
    indexLinks[index].classList.add('active');
});

indexBar.addEventListener('touchmove', function (event) {
    event.preventDefault();
    var touches = event.touches[0];
    var index = Math.floor((touches.pageY - this.offsetTop) / 15);
    // 获取对应的 li 标签,并设置样式高亮
    indexLinks[index].classList.add('active');
    // 取消之前已经高亮的 li 标签样式
    for (var i = 0; i < indexLinks.length; i++) {
        if (i !== index) {
            indexLinks[i].classList.remove('active');
        }
    }
});

indexBar.addEventListener('touchend', function (event) {
    event.preventDefault();
    // 获取最后一次高亮的 li 标签的索引位置
    var index = -1;
    for (var i = 0; i < indexLinks.length; i++) {
        if (indexLinks[i].classList.contains('active')) {
            index = i;
            break;
        }
    }
    // 计算应该滚动到哪一个大类别的位置
    var target = document.querySelector(indexLinks[index].getAttribute('href'));
    var position = target.offsetTop;
    // 通过 animate 实现滚动效果
    $('html, body').animate({ scrollTop: position }, 300);
});

3. 实现滑动显示锚点效果

在滑动时,可以让字母锚点逐渐显现,从而提高交互体验。实现方法如下:

  1. 定义一个 activeIndex 变量,记录正在高亮显示的链接对应的字母索引位置。
  2. 在 touchmove 事件中,根据触点距离计算当前的字母索引位置,如果该位置与 activeIndex 相等,则不需要进行任何操作,否则更新 activeIndex 变量。

代码示例如下:

// 定义 activeIndex 变量,记录正在高亮显示的链接对应的字母索引位置
var activeIndex = -1;

indexBar.addEventListener('touchmove', function (event) {
    event.preventDefault();
    var index = Math.floor((event.touches[0].pageY - this.offsetTop) / 15);
    if (index !== activeIndex) {
        activeIndex = index;
        // 展示 activeIndex 对应的字母锚点
        $('.index-bar a').removeClass('active').eq(activeIndex).addClass('active');
    }
});

这样,在滑动时,就可以实现字母锚点的逐渐显现效果。

至此,完成了通讯录的索引滑动显示效果和滑动显示锚点效果的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现做通讯录的索引滑动显示效果和滑动显示锚点效果 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • mongoDB中CRUD的深入讲解

    MongoDB中CRUD的深入讲解 MongoDB是一个开源的著名文档数据库,其灵活的数据模型和易用的API让我们在处理海量数据时更加高效,其中CRUD操作是MongoDB中最为常见的操作,本文将对CRUD操作进行深入的讲解,并附带两条示例。 什么是CRUD CRUD指的是Create(创建)、Read(读取)、Update(更新)和Delete(删除)操作…

    MongoDB 2023年5月16日
    00
  • mongodb的安装使用和pymongo基本使用教程

    一、mongodb的安装使用 安装mongodb Windows下安装 下载mongodb版本:https://www.mongodb.com/download-center/community 选择所需要的版本。选择适用于Windows的msi安装程序 下载后双击安装程序,跟着向导一步一步安装就可以了。 Linux下安装 进入官网下载:https://ww…

    MongoDB 2023年5月16日
    00
  • mongodb与sql关系型数据比较

    MongoDB和SQL是两种完全不同的数据库技术。SQL是关系型数据库,而MongoDB是文档型数据库。下面详细说明MongoDB和SQL的比较: 1. 数据结构 MongoDB是文档型数据库,存储的数据称为文档(document),这些文档是以键值对的形式存储在集合(collection)中。MongoDB的储存方式类似于JSON,非常灵活,可以存储不同类…

    MongoDB 2023年5月16日
    00
  • 什么是数据库索引 有哪些类型和特点

    下面是关于“什么是数据库索引,有哪些类型和特点”的详细讲解。 什么是数据库索引? 数据库索引是一种数据结构,用于快速查找数据库中的记录。它类似于图书馆的书目索引,可以快速定位到需要查询的书籍。 在数据库中,数据通常以表格的形式存储。每个表格都包含多行数据,每行数据包含多个字段。当我们需要查询数据库时,DBMS会扫描整个表来检索相关数据。如果表中数据量非常大,…

    MongoDB 2023年5月16日
    00
  • MongoDB开启权限认证的方法步骤详解

    下面是关于“MongoDB开启权限认证的方法步骤详解”的完整攻略。 1. 为什么需要开启MongoDB的认证功能? 在基础配置的情况下,MongoDB是开放的并且不需要身份认证。这意味着,任何人都可以访问数据库中的数据。尤其是在生产环境中,如果没有开启MongoDB的安全认证功能,这会带来很多安全隐患。因此为了保障MongoDB的数据安全,我们需要开启Mon…

    MongoDB 2023年5月16日
    00
  • Mongodb 用户权限管理及配置详解

    MongoDB 用户权限管理及配置详解 MongoDB是一款非关系型数据库,在使用过程中,需要对数据进行管理和权限配置,以保证数据的安全性。本文将介绍MongoDB用户权限管理及配置的详细步骤。 1. 连接MongoDB数据库 使用命令行连接MongoDB数据库,进入mongo shell: mongo 2. 创建管理员用户 为了保证数据的安全性,首先需要创…

    MongoDB 2023年5月16日
    00
  • mongodb 命令行下及php中insert数据详解

    我来详细讲解一下 “MongoDB命令行下及PHP中insert数据详解” 的攻略,以下是完整的内容: MongoDB命令行下及PHP中insert数据详解 什么是MongoDB? MongoDB是一款开源的、高性能的NoSQL数据库系统,具有很高的可扩展性和可用性。它使用文档表示数据,支持丰富的数据查询和索引,并提供高度可用性和自动分片功能。 在命令行下插…

    MongoDB 2023年5月16日
    00
  • 深入理解MongoDB分片的管理

    深入理解MongoDB分片的管理 MongoDB的分片是一个重要的数据库高可用性和性能优化策略。本文将详细介绍如何在MongoDB中进行分片管理。 步骤一:分片键的选择 在分片之前,必须选择一个分片键。这个键将会被用于分片的目的,可以是任何一个字段。MongoDB将会根据这个键将数据划分到不同的分片上。 sh.shardCollection("te…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部