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

yizhihongxing

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

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日志切割的三种方式总结

    MongoDB日志切割的三种方式总结 在MongoDB的使用过程中,日志占据了不可忽视的重要位置,对于MongoDB的性能调优和问题排查都是必不可少的。为了保证日志的可读性和不影响服务器的正常运行,我们经常需要对MongoDB的日志进行切割。下面将介绍MongoDB日志切割的三种常用方式。 1. 按日志大小切割 这种方式是最常用的一种切割方式,它可以将当前的…

    MongoDB 2023年5月16日
    00
  • MongoDB常用操作汇总

    MongoDB常用操作汇总 简介 MongoDB是一种开源的、高性能、面向文档的数据库。在操作方面,MongoDB的命令行和图形界面工具非常友好,非常适合开发人员进行数据存储和管理。 本文将提供常用的MongoDB操作指南,包括CRUD操作、索引设置、聚合操作等。 连接数据库 连接MongoDB需要使用mongo命令,如下所示: mongo –host &…

    MongoDB 2023年5月16日
    00
  • 28个MongoDB经典面试题详解

    28个MongoDB经典面试题详解攻略 问题1:什么是MongoDB? MongoDB是一个基于分布式文件存储的开源数据库系统,以易于使用、高性能和可扩展性被广泛使用。 问题2:为什么使用MongoDB? MongoDB具有以下优点: 高可扩展性 更好的性能 无需定义架构 极其强大的查询语句 支持灵活的文档结构 问题3:什么是MongoDB集合? Mongo…

    MongoDB 2023年5月16日
    00
  • 关于NoSQL之MongoDB的一些总结

    关于NoSQL之MongoDB的一些总结 什么是NoSQL? NoSQL是“Not only SQL”的缩写,表示非关系型数据库,它不像传统的关系型数据库(SQL)那样有严格的表结构和数据类型限制,相对灵活。 MongoDB是什么? MongoDB是一款比较流行的NoSQL数据库,它是一种文档存储数据库,可以存储各种复杂的文档类型,并且支持分布式部署。 Mo…

    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
  • docker的一些基本指令

    下面我将详细讲解关于Docker基本指令的攻略,包含两条示例说明。 Docker基本指令攻略 拉取Docker镜像 在使用Docker构建环境时,我们需要使用到Docker镜像,通常我们需要从Docker Hub上拉取需要使用的镜像。 docker pull 镜像名称 这里的镜像名称指的是在Docker Hub上对应的镜像名,例如,如果需要拉取Ubuntu的…

    MongoDB 2023年5月16日
    00
  • 使用批处理实现启动和停止服务的代码分析(net start&net stop)

    以下是使用批处理实现启动和停止服务的完整攻略: 1. 批处理实现启动服务 在Windows操作系统中,我们可以使用net start命令来启动服务。在批处理中添加net start命令,并指定需要启动的服务名称,即可实现启动服务的功能。 例如,我们需要启动Windows更新服务(Windows Update),则可以使用以下批处理代码: @echo off …

    MongoDB 2023年5月16日
    00
  • MongoD管理数据库的方法介绍

    下面是MongoDB管理数据库的完整攻略: MongoDB管理数据库的方法介绍 背景介绍 MongoDB是一款非关系型数据库,具有高可扩展性、高性能、高灵活性等优点。本文将介绍MongoDB的管理方法,帮助管理员更好地管理MongoDB数据库。 常用的MongoDB管理工具 MongoDB提供了多个工具来帮助管理员管理数据库,常用的包括: Mongo She…

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