当前位置:  开发笔记 > 编程语言 > 正文

JavaScript将触摸事件映射到鼠标事件

如何解决《JavaScript将触摸事件映射到鼠标事件》经验,为你挑选了2个好方法。

我正在使用与鼠标移动事件一起操作的YUI滑块.我想让它回应touchmove事件(iPhone和Android).当touchmove事件发生时,如何生成鼠标移动事件?我希望只是通过在顶部添加一些脚本,touchmove事件将被映射到鼠标移动事件,我将不必使用滑块更改任何内容.



1> Mickey Shine..:

我相信这就是你想要的:

function touchHandler(event)
{
    var touches = event.changedTouches,
        first = touches[0],
        type = "";
    switch(event.type)
    {
        case "touchstart": type = "mousedown"; break;
        case "touchmove":  type = "mousemove"; break;        
        case "touchend":   type = "mouseup";   break;
        default:           return;
    }

    // initMouseEvent(type, canBubble, cancelable, view, clickCount, 
    //                screenX, screenY, clientX, clientY, ctrlKey, 
    //                altKey, shiftKey, metaKey, button, relatedTarget);

    var simulatedEvent = document.createEvent("MouseEvent");
    simulatedEvent.initMouseEvent(type, true, true, window, 1, 
                                  first.screenX, first.screenY, 
                                  first.clientX, first.clientY, false, 
                                  false, false, false, 0/*left*/, null);

    first.target.dispatchEvent(simulatedEvent);
    event.preventDefault();
}

function init() 
{
    document.addEventListener("touchstart", touchHandler, true);
    document.addEventListener("touchmove", touchHandler, true);
    document.addEventListener("touchend", touchHandler, true);
    document.addEventListener("touchcancel", touchHandler, true);    
}

我已经捕获了触摸事件,然后手动触发我自己的鼠标事件来匹配.尽管代码不是特别通用的,但是应该适应大多数现有的拖放库以及可能是大多数现有的鼠标事件代码应该是微不足道的.希望这个想法对于为iPhone开发Web应用程序的人们来说会派上用场.

更新:

在发布此消息时,我注意到调用preventDefault所有触摸事件将阻止链接正常工作.打电话的主要原因preventDefault是阻止手机滚动,你可以通过回拨来调用它touchmove.这样做的唯一缺点是iPhone有时会在拖动原点上显示其悬停弹出窗口.如果我发现了一种防止这种情况的方法,我会更新这篇文章.

第二次更新:

我找到了关闭标注的CSS属性:-webkit-touch-callout.


现在不建议使用initMouseEvent方法(https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/initMouseEvent)

2> Pat..:

按照@Mickey Shine的回答,Touch Punch提供触摸事件到点击事件的映射.它是为了将这种支持放入jQuery UI而构建的,但代码是提供信息的.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有