0

我正在创建一个需要跨浏览器兼容的移动网站。对于一项功能,我需要检测触摸事件的位置。

Windows Phone 不支持 touchstart 等,所以我改用 mousedown,但我无法从事件中获取页面位置。它在桌面上没有问题,并且在 windows phone 上检测到鼠标按下,但我不知道如何获得 offsetX - offset Y。

这是一个适用于桌面和 iPhone 和 android 的示例(我使用的是 jQuery,但没有插件或任何非标准的东西):

$("div").on("touchstart mousedown", function(e){
    org_x = e.originalEvent.changedTouches[0].pageX ? e.originalEvent.changedTouches[0].pageX : e.originalEvent.offsetX;
    alert(org_x);

    org_y = e.originalEvent.changedTouches[0].pageY ? e.originalEvent.changedTouches[0].pageY : e.originalEvent.offsetY;
    alert(org_y);
});

我已经在 windows phone 8 和 9 上测试过了

4

3 回答 3

1

试试这个代码,它会正常工作

document.getElementById("clickdiv").addEventListener("MSPointerDown",handleDown,false);

function handleDown(evt) {
    alert(evt.originalEvent.layerX);
}

$("#clickdivalt").on("MSPointerDown", handleAltDown);

function handleAltDown(evt){
    alert(evt.originalEvent.layerX);
}
于 2014-05-30T09:58:56.280 回答
0

从我看到你想阅读这篇文章:移动设备上的触摸/手势或看看这个堆栈溢出问题:Windows phone 8 touch support

我仍在寻找箭头,并会在找到更好的解决方案时更新我的​​答案!

于 2013-05-03T13:55:47.633 回答
0

问题宽度 MSPonterDown 等似乎是 jquery 错误/不兼容。如果我使用纯 javascript 设置事件处理程序,我可以获得 pageX 和 pageY 属性。如果我用 jquery 设置事件处理程序,则没有 pageX pageY。

document.getElementById("clickdiv").addEventListener("MSPointerDown",handleDown,false);

function handleDown(evt) {
    alert(evt.pageX);
}

$("#clickdivalt").on("MSPointerDown", handleAltDown);

function handleAltDown(evt){
    alert(evt.pageX);
}
于 2013-05-04T14:56:19.297 回答