【问题标题】:Javascript mousedown event location on windows phoneWindows手机上的Javascript mousedown事件位置
【发布时间】:2013-05-03 13:40:01
【问题描述】:

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

Windows Phone 不支持 touchstart 等,所以我改用 mousedown,但我无法从事件中获取页面位置。它在桌面上没有问题,并且在 windows phone 上检测到 mousedown,但我不知道如何获取 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 上测试过这个

【问题讨论】:

  • 我不知道触摸事件或手机有什么不同,但你为什么不直接使用e.pageXe.pageY——而不是处理originalEvent。我很确定 jQuery 标准化了事件的位置,所以你不必做这样的事情
  • e.pageX e.pageY 适用于 mousedown mouseup,但在 windows phone mousemove 被视为与 mousedown 相同,因此它非常有限

标签: javascript jquery mobile windows-phone jquery-events


【解决方案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);
}

【讨论】:

    【解决方案2】:

    据我所知,您想阅读这篇文章:Touch/Gestures On Mobile Devices 或看看这个堆栈溢出问题:Windows phone 8 touch support

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

    【讨论】:

    • 感谢您的回复。我会看看你推荐的文章
    • 我尝试了 MSPointerDown 等。它们触发正常,但似乎没有任何位置属性。
    【解决方案3】:

    问题宽度 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);
    }
    

    【讨论】:

    • evt.originalEvent.layerX 可以正常工作。您应该首先找到响应 evt 的属性。在那里您可以看到一个名为 originalEvent 的属性 查看该对象内部的属性您可以看到 layerX .这就是我们想要的..我们也可以使用 clintX 代替 layerX
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多