当前位置: 首页 > 面试题库 >

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

沈博延
2023-03-14
问题内容

我正在使用与鼠标移动事件一起操作的YUI滑块。我想让它响应touchmove事件(iPhone和Android)。发生touchmove事件时如何产生鼠标移动事件?我希望仅在顶部添加一些脚本,即可将touchmove事件映射到鼠标移动事件,而无需使用滑块进行任何更改。


问题答案:

我确定这是您想要的:

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



 类似资料:
  • 触摸操作概述 浏览器的触摸 API 由三个部分组成。 Touch:一个触摸点 TouchList:多个触摸点的集合 TouchEvent:触摸引发的事件实例 Touch接口的实例对象用来表示触摸点(一根手指或者一根触摸笔),包括位置、大小、形状、压力、目标元素等属性。有时,触摸动作由多个触摸点(多根手指)组成,多个触摸点的集合由TouchList接口的实例对象表示。TouchEvent接口的实例对

  • 触摸事件是手机游戏中最重要的事件,它易于创建,还能提供多种多样的功能。 让我们先了解一下什么是触摸事件,当你触摸移动设备的屏幕时,设备感受到被触摸,了解到被触摸的位置,同时取得触摸到的内容,然后你的触摸被回答。 这就是触摸事件。 如果你希望通过触摸控制屏幕下层的对象,那可以通过 优先级,达成这种需求,优先级高的对象能先处理事件。 创建触摸事件监听器: // Create a "one by on

  • 本文向大家介绍javascript触发模拟鼠标点击事件,包括了javascript触发模拟鼠标点击事件的使用技巧和注意事项,需要的朋友参考一下 事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法。 一般我们在元素上绑定事件后,是靠用户在这些元素上的鼠标行为来捕获或者触发事件的,或者自带的浏览器行为事

  • 主要内容:jQuery Mobile 点击,实例,jQuery Mobile 点击不放(长按),实例,jQuery Mobile 滑动,实例,jQuery Mobile 向左滑动,实例,jQuery Mobile 向右滑动,实例触摸事件在用户触摸屏幕(页面)时触发。 触摸事件同样可应用与桌面电脑上:点击或者滑动鼠标! jQuery Mobile 点击 点击事件在用户点击元素时触发。 如下实例:当点击 <p> 元素时,隐藏当前的 <p> 元素: 实例 $("p").on("tap",functio

  • 我想知道是否有可能在GLSurfaceView上进行ImageView并获得两者各自的触摸事件。我的问题是,我想知道ImageView何时被按下(因此我将使用OnTouchListener)。但是,我仍然希望能够获得我的glsurfaceview的触碰事件。 提前感谢, 编辑:这是我的activity_main.xml

  • 触摸事件在用户触摸屏幕(页面)时触发。 触摸事件同样可应用与桌面电脑上:点击或者滑动鼠标! jQuery Mobile 点击 点击事件在用户点击元素时触发。 如下实例:当点击 <p> 元素时,隐藏当前的 <p> 元素: $("p").on("tap",function(){   $(this).hide(); }); jQuery Mobile 点击不放(长按) 点击不放(长按) 事件在点击并