Touchmove获取当前触摸的Dom节点
原文链接:https://www.jianshu.com/p/a2a41fe20790
Touchmove获取当前触摸的Dom节点
近期为自己的app增加一个通讯录首字母导航的功能,如下图蓝色框部分,需求很好理解,在手指触摸相应字母时,通讯录自动滚动到相应首字母的联系人。

这边通过需求分析,很容易联想到,使用touchstart和touchmove这两个方法来处理响应操作,touchstart比较简单就不说了,监听touchmove事件时,发现一个问题,当我无论如何在监听元素上移动我的手指,所返回的event.touches[0].target永远指向第一个触摸元素的event对象,而不会指向我当前手指所触摸的元素。
这也就意味着我无法通过回调返回的event来获取当前手指触摸的元素
通过查阅资料,这是普遍存在的问题,最推荐的解决方案是使用
elementFromPoint
语法:
getMyElement = document.elementFromPoint ( myX , myY )
参数:
myX : 必选项。整数(Integer)。单位:象素(Pixel)。定位横坐标偏移量。
myY : 必选项。整数(Integer)。单位:象素(Pixel)。定位纵坐标偏移量。
返回值:
getMyElement : 对象(Element)。返回当前文档上处于指定坐标位置最顶层的Dom元素。
我们通过touchmove事件返回的event对象,可以获取当前手指触摸元素的clientX和clientY的值,将值传入document.elementFromPoint就可获取当前触摸的值,这里需要注意的是此方法返回的是最顶层的Dom,所以务必将你需要的Dom的z-index设置为最高,分享些许我在此项目的核心代码:
/**
*获取存储当前Dom位置的对象
**/
var myLocation = e.originalEvent.changedTouches[0];
/**
*取clientX及clientY并传入elementFromPoint获取当前手指触摸的Dom,大功告成,现在此Dom可以任你摆布了
**/
var realTarget = document.elementFromPoint(myLocation.clientX, myLocation.clientY);
Touchmove获取当前触摸的Dom节点的更多相关文章
- vue 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点
<template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...
- vue怎么不通过dom操作获取dom节点
今天写一个公众号的项目,写了一个vue的搜索组件,点击搜索框时,背景出现一个遮罩,代码结构如下: template:`<div class="searchBar-div"&g ...
- vue2.* 双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 04
<template> <div id="app"> <!-- 双向数据绑定(必须在表单里面使用) m:model v:view mvvm:model改 ...
- Vue 及双向数据绑定 Vue事件 以及Vue中的ref获取dom节点
<template> <div id="app"> <h2>{{msg}}</h2> <input type="te ...
- layer 父弹窗获取子弹窗内的dom节点元素和变量
1 var body = layer.getChildFrame('body', index); //获取子弹窗的dom节点 2 3 var iframeWin = window[layero.fin ...
- jacascript DOM节点——元素节点、属性节点、文本节点
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! DOM节点的三个种类:元素节点.文本节点.属性节点: 元素节点 元素节点就是 HTML 标签元素,元素节点 ...
- vue-获取dom节点
获取dom节点可以用ref属性,这个属性就是来获取dom对象的.看代码 这个属性就相当于给这个标签起了一个id样的东西 <input type="text" ref=&qu ...
- 通过DOM节点操作来获取表单信息
这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的 ...
- JavaScript获取HTML DOM节点元素详解(转)
在Web运用程序特别是Web 2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要处理的疑问. 51CTO推荐阅读:JavaScript DOM文档 ...
随机推荐
- 297. Serialize and Deserialize Binary Tree二叉树的序列化和反序列化(就用Q)
[抄题]: Serialization is the process of converting a data structure or object into a sequence of bits ...
- eclipse+hbase开发环境部署
一.前言 1. 前提 因为hbase的运行模式是伪分布式,需要用到hdfs,所以在此之前,我已经完成了hadoop-eclipse的开发环境搭建,详细看另一篇文章:hadoop开发环境部署——通过ec ...
- Linux Bash脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更 ...
- Sqlserver时间函数用法(二)
--1. 当前系统日期.时间 select getdate() --2015-01-06 09:27:27.277 --2.时间操作 dateadd 在向指定日期加上一段时间的基础上,返回新的 dat ...
- StringUtils详解
public static void StringUtil(){ //null 和 ""操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判断是否 ...
- java校验银行卡号
public class CheckBankCard { /* 校验过程: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如 ...
- Python3+Apache+Django+CentOS
使用django开发的项目上到正式环境的环境搭建,系统软件版本: CentOS6. setuptools-.tar.gz pip-.tar.gz Python-.tgz pcre-8.39.tar.b ...
- dd命令使用
一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...
- 【转载】如何选择MySQL存储引擎
一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...
- sql五大类中的 DTL 数据事务语言
DTL,数据事务语言 事务的定义:就是指一组相关的SQL操作,我们所有的操作都是事务中的. 注意:在数据库中,执行业务的基本单位是[事务],不是以某一条SQL. 数据库在默认情况下,事务是都打开 ...