Touchmove获取当前触摸的Dom节点

作者: SuperBinlin | 来源:发表于2017-12-15 19:38 被阅读667次

近期为自己的app增加一个通讯录首字母导航的功能,如下图蓝色框部分,需求很好理解,在手指触摸相应字母时,通讯录自动滚动到相应首字母的联系人。


image.png

这边通过需求分析,很容易联想到,使用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节点

    近期为自己的app增加一个通讯录首字母导航的功能,如下图蓝色框部分,需求很好理解,在手指触摸相应字母时,通讯录自动...

  • 移动端触摸事件

    移动端 一、定义 触摸事件类型 touchstart:手指触摸到一个 DOM 元素时触发。touchmove:手指...

  • js dom节点操作

    获取dom节点 新增dom节点 删除dom节点

  • Dom操作

    操作节点 获取节点 获取子节点 更新DOM innerHTMLinnerTEXT 插入DOM appendChil...

  • DOM

    一、对象基础(补充) 二、DOM获取节点 三、间接获取节点 四、DOM节点的添加和删除 五、DOM属性操作 六、练...

  • jS|DOM操作

    DOM节点的获取 DOM节点的创建 DOM节点删除 修改DOM元素 将指定两个DOM元素交换位置

  • el-table中的数据滚动加载实现

    第一步: 获取到当前滚动加载的el-table表格节点 注意的是 如果存在多个表格,用ref获取dom节点,需要指...

  • DOM(文档对象)、BOM(浏览器对象)

    DOM 获取DOM节点 DOM节点的property,修改对象属性,不会提现到html结构 DOM节点的attri...

  • 任务22

    问答 1.dom对象的innerText和innerHTML有什么区别? innerText:获取到当前节点的文本...

  • 初识jQuery之jQuery-Dom操作和数据操作(四)

    一、Dom操作 1.parents() :获取当前元素的所有祖先节点,参数就是筛选功能; 2.closest() ...

网友评论

    本文标题:Touchmove获取当前触摸的Dom节点

    本文链接:https://www.haomeiwen.com/subject/idhdwxtx.html