专栏首页HTML5学堂移动端 模拟手机联系人触摸A~Z导航

移动端 模拟手机联系人触摸A~Z导航

HTML5学堂:今天要与大家分享一个当前移动端很常见的效果,类似于手机联系人的快速导航功能,即当触摸a~z的字母时,能够相对应的显示文字。有些手机的音乐导航也类似,具体可详见下图:

touchmove的问题

在移动端,我们可以使用touch事件进行处理,此处首先想到的是使用touchmove事件。本身touchmove事件是会随着手指不断接触屏幕而不断被触发,而在事件的知识当中,我们有事件委托以及事件目标对象e.target的技术,因此,基本的实现思路就成了:将touchmove事件绑定在字母元素的父级身上(即使用事件委托),之后进行实时的目标检测(即检测e.target),然后根据目标的不同实现左侧内容的位置变化。

想法是好的,但是在实际的操作中发现,虽然touchmove会触发多次,但是并不能够实时获取e.target(事件目标对象),这也就使得上面的这种思路成了空想。

实现触摸a~z导航(模拟手机联系人)

当前能够想到的实现方法有两种(也均测试无误)

第一种方法:手指滑动的时候,判断手指滑动的竖向位置,如果到达相应标签的位置(由于标签是fixed定位模式,因此可以拿到每个标签[A、B]的高度值),则进行左边内容的控制。

第二种方法比第一种会更方便,也是我这里介绍的一种方法,利用elementFromPoint。elementFromPoint()返回给定坐标处所在的元素。是个在目前而言,兼容性不错的一种方法,具体代码如下:

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML5学堂 - H5course - http://www.h5course.com</title>
    <meta name="viewport" content="width=device-width,user-scalable=no">
    <link rel="stylesheet" href="css/reset.css">
    <style>
        body {
            font-size: 24px;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <ul id="list">
            <li>HTML5学堂</li>
            <li>移动端开发</li>
            <li>模拟手机联系人导航</li>
            <li>a~z的拖拽</li>
            <li>touchmove的问题</li>
            <li>使用elementFromPoint实现兼容</li>
        </ul>
    </div>
    <div id="con"></div>
    <script src="js/zepto.js"></script>
    <script>
        var con = document.getElementById('con');
        var list = document.getElementById('list');
        list.addEventListener('touchmove', function(e){
            var x = e.touches[0].pageX;
    var y = e.touches[0].pageY;
            var target = document.elementFromPoint(x, y);
            con.innerHTML = target.innerHTML;
        }, false);
    </script>
</body>
</html>

最后解释一下基本原理:在手指一动的时候,获取到手指的位置,之后根据位置获取当前的目标元素。之后进行相应操作即可。

本文分享自微信公众号 - HTML5学堂(h5course-com),作者:HTML5学堂

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 获取标签的那些事 之 动态集合

    HTML5学堂:今天的内容从一道题开始,很简单,但是,你可能会“跪”得很惨。之后我们自然要挖一挖这个坑喽~所有学过JavaScript的人都知道获取标签,但是真...

    HTML5学堂
  • 新浪面试真题

    1.请写出一张图片的HTML代码,已知道图片地址为“images/abc.jpg”,宽100px,高50px 2.请问display:none和visibili...

    HTML5学堂
  • 拉手网面试题,不一样的难度

    正文 1、JavaScriptalert(0.4*0.2);结果是多少?和你预期的一样吗?如果不一样该如何处理? 2、JavaScript以下哪条语句会产生运行...

    HTML5学堂
  • 算法基础

    人生不如戏
  • Cypress学习12-父子元素定位

    若要在元素中获取所有下一个同级DOM元素,直到另一个元素,请使用.next until()命令。

    上海-悠悠
  • bootstrap 分页 常用样式 1

    pagination <ul class="pagination"> <li><a href="#">«</a></li> <li><a href...

    用户5760343
  • JavaScript 使用getElementsByTagName获取元素

    可以使用内置对象document上的getElementsByTagName方法来获取页面上的某一种标签,获取的是一个选择集,不是数组,但是可以用下标的方式操作...

    Devops海洋的渔夫
  • html 有序列表、无序列表、自定义列表

    HTML有一个特殊元素,用于创建ordered lists(有序列表), 或数字编号列表。 有序列表以<ol>元素开始,并包含一个或多个<li>元素。 例如...

    Devops海洋的渔夫
  • pyhon 列表的增删改查

    py3study
  • 第3章 排列清单控制标记

    排列清单控制标记可以创建一般的列表、编号列表或加着重号列表,以及定义列表。还可以在一种列表中嵌套另外一种列表。对于概况因特网上的内容,列表特别重要。

    py3study

扫码关注云+社区

领取腾讯云代金券