在適用於Android版本16和18(至少)的Chrome中,存在錯誤地報告clientX
和clientY
的錯誤。如果頁面滾動,至少touchstart
事件的clientX/Y
值將不正確,但不是click
事件。有在這裏討論了一個錯誤:對於Android的不正確的clientX和clientY行爲,Chrome的解決方法是什麼?
https://code.google.com/p/chromium/issues/detail?id=117754
其中包含了這個例子,你可以嘗試一下自己:http://www.apprisant.com/tab/cd.html
我已經用帆布這裏一個類似的例子:http://codepen.io/simonsarris/full/dJcvn
這些例子在其他移動瀏覽器(包括普通的舊版Android瀏覽器)上工作,但Chrome for Android似乎在滾動時(至少有一些)觸摸事件破壞了clientX/Y。
有趣的是,客戶端X和客戶端Y在click
事件中沒有損壞,就像他們在touchstart
上一樣。
我的問題是,什麼是讓clientX和clientY在瀏覽器中一致工作的最佳解決方法是什麼?看來,與window.scrollX
和window.scrollY
抵消將「解決」的問題,而是一個很好的解決辦法需要:
- 確定瀏覽器罹患與否,最好不給用戶做任何事情,而不是訴諸檢查userAgent(所以不作任何特定瀏覽器版本的假設)。換句話說,我們如何判斷哪些瀏覽器對於
clientX
和clientY
有不良的值? - 只有在需要解決的瀏覽器上才能可靠地解決問題(大概只有Android版Chrome和僅適用於Chrome的特定版本,因爲將來的版本可能會很好),看起來,
window.scrollX/Y
抵消是唯一需要的在這裏完成。
除了使用正確的值來告訴哪些瀏覽器有這種行爲,你有任何理由嗎?解決方法使條件檢查效率低於僅使用不同的方法計算clientX/Y。 –
我不確定,但我發現這個問題的討論,也許它會幫助你:https://code.google.com/p/chromium/issues/detail?id=141840#c19 – bonbonez