Touchmove獲取當前觸摸的Dom節點


原文鏈接:https://www.jianshu.com/p/a2a41fe20790

Touchmove獲取當前觸摸的Dom節點

近期為自己的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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM