移动端 模拟手机联系人触摸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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DeveWork

阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页

最近为了更好地接触移动Web 开发狠心购买了一台ipad mini(之前一直都是借同学的,借多了就不好意思了)。拿来调试DeveMobile 与EaseMobi...

81110
来自专栏闻道于事

表格及布局——0606上午

今天上午学习了表格的应用以及如何用表格进行页面布局。以下面代码为例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

27810
来自专栏HTML5学堂

iconfont字体图标库

HTML5学堂小编的话:昨日发布的iconfont的内容有些不足,对于可能不太了解iconfont和特殊字体的学习者来说,可能会存在一定的理解问题,在此针对昨日...

4426
来自专栏IMWeb前端团队

移动端web开发入门笔记

移动端web开发基本上分为三种: 移动端网页开发 传统的页面开发,可以参考手机腾讯网。 移动端web app开发 简单来说就是在开发中使用一些浏览器私有的方法...

2019
来自专栏九彩拼盘的叨叨叨

学习纲要:CSS 基础概念

471
来自专栏Java成神之路

Markdown_语法学习_00_资源帖

806
来自专栏Jackson0714

JavaScrpit判断横竖屏

1163
来自专栏一“技”之长

Bootstrap响应式前端框架笔记十七——下拉列表交互

    为dropdown-toggle类添加data-toggle="dropdown"属性可以实现其下拉列表功能的绑定,示例如下:

853
来自专栏较真的前端

那些暖人心却鲜为人知的CSS属性

1776
来自专栏阮一峰的网络日志

自适应网页设计(Responsive Web Design)

随着3G的普及,越来越多的人使用手机上网。 移动设备正超过桌面设备,成为访问互联网的最常见终端。于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈...

8916

扫码关注云+社区