将多点触控带到 Firefox 和 Web 上

精力充沛的 Felipe Gomes 在巴西繁忙的学期之间,很乐意在今年夏天在 Mozilla 实习。在那段时间里,他一直在致力于 Windows 7 上 Firefox 的多点触控支持。这项工作的一个不错的成果是他还找到了将多点触控支持带到 Web 的方法。他制作了一个简短的视频,并写了一些简短的技术信息与之搭配。

这篇文章也已 交叉发布到 Felipe 的个人博客

Firefox 上的多点触控 来自 FelipeVimeo 上。

我一直很渴望展示 Firefox 多点触控支持的进展,这段视频展示了一些可能的交互和用例,说明网页和 Web 应用可以使用多点触控设备做什么。

我们正在努力通过 DOM 事件将系统中的多点触控数据公开给常规网页,所有这些演示都构建在该基础之上。它们是简单的 HTML 页面,接收每个触摸点的事件,并使用它们来构建自定义的多点触控体验。

我们还添加了 CSS 支持,以便在您在触摸屏设备上运行时进行检测。使用伪选择器 :-moz-system-metric(touch-enabled),如果您的页面在触摸屏设备上查看,则可以为其应用特定的样式。这与物理 CSS 单位(厘米或英寸)一起,可以调整您的 Web 应用以适应触摸屏体验。

Firefox 3.6 将包含 CSS 属性,但不太可能包含下面描述的 DOM 事件。

以下是一个 API 的示例。我们有三个新的 DOM 事件(MozTouchDownMozTouchMoveMozTouchRelease),它们类似于鼠标事件,但它们有一个名为 streamId 的新属性,可以唯一地识别在 MozTouch 事件系列中跟踪的同一根手指。以下代码段是第一个演示的代码,我们在此演示中在每个触摸点的 X/Y 位置下移动独立的 <div>

var assignedFingers = {};
var lastused = 0;

function touchMove(event) {
    var divId;
    if (lastused < = 4)
        return;

    if (assignedFingers[event.streamId]) {
        divId = assignedFingers[event.streamId];
    }
    else {
        divId = "trackingdiv" + (++lastused);
        assignedFingers[event.streamId] = divId;
    }

    document.getElementById(divId).style.left = event.clientX + 'px';
    document.getElementById(divId).style.top  = event.clientY + 'px';
}

document.addEventListener("MozTouchMove", touchMove, false);
document.addEventListener("MozTouchRelease",
                          function () { lastused--; }, false);

维基页面上,您可以看到其他演示的代码片段。关于演示或 API 的任何评论,请在 我的博客文章上发表。我们非常欢迎反馈,并希望就此领域展开一些良好的讨论。希望随着触摸设备(移动设备和笔记本电脑)越来越受欢迎,我们将看到在 Web 上使用触摸和多点触控的新颖和创造性的方法。


17 条评论

  1. Dan

    很棒的东西。我目前没有任何多点触控设备,但当我有的时候,我期待能够在 Web 上使用它。多点触控确实使 HCI 更直观。

    2009 年 8 月 21 日 下午 5:58

  2. […] 来源:https://hacks.mozilla.ac.cn/2009/08/multi-touch-firefox […]

    2009 年 8 月 22 日 上午 4:40

  3. Jean

    这听起来很有趣,但是您如何防止与基于多点触控的现有功能发生干扰?

    我想到了 iPhone(即使那里还没有 Firefox),用两只手指拖动可以放大和缩小网页,那么这与视频中显示的图像编辑用例之间会发生什么……?

    2009 年 8 月 24 日 上午 6:18

  4. […] 他使用 Firefox 在 Windows 7 上获得多点触控支持的工作……更多信息请访问此处和他的博客 […]

    2009 年 8 月 24 日 上午 6:33

  5. F1LT3R

    非常酷。Felipe 干得漂亮!迫不及待地想开始在 Web 应用中使用这些东西。

    2009 年 8 月 24 日 上午 9:21

  6. […] 我的一位朋友最近向我链接了这段有趣的多点触控视频(见下文)。该视频描述了一个完成的多点触控项目 […]

    2009 年 8 月 24 日 上午 10:08

  7. Felipe Gomes

    @Jean:这是一个好问题。这两个手势是相同的,因此肯定存在歧义,因此我们计划最终网页能够在获取原始事件或使用浏览器提供的常规多点触控支持之间做出决定。
    在当前的实验性实现中,我们正在做的是网页可以将属性 document.multitouchData 设置为 true,然后浏览器将不会缩放或滚动,并将开始将 DOM 事件发送到页面。但是正在考虑更好的解决方案,例如,当页面开始侦听 MozTouch 事件时在模式之间切换。

    2009 年 8 月 24 日 下午 8:01

  8. […] 甚至最近还演示了多点触控屏幕事件,这些事件使您能够使用您的 […] 控制浏览器 […]

    2009 年 9 月 15 日 上午 8:54

  9. […] 出现在 mozilla.org 和 Pc 网站上 […]

    2009 年 10 月 16 日 下午 12:34

  10. Gert

    您好,

    我一直在尝试在 Windows 7 Professional 和 Acer T230H 显示器上的 Firefox 3.7 alpha 上运行它,但没有成功。我在 http://gert.dk/moztouch 上提供了一个非常简单的测试页面

    Firefox 确实响应 -moz-system-metric(touch-enabled) css 选择器,但我无法在我的 javascript 中获得任何反应,监视器上的常规点击被识别为鼠标点击。

    http://www.mgalli.com/development/drawing/demoapp.html 上的绘图示例应用也不起作用(通过这篇博文找到:http://www.labnol.org/internet/firefox-logo-drawn-using-firefox/10579)。

    我查看了 about:config,看看是否应该启用某些内容以使 Mozilla 触摸事件正常工作,但我找不到任何内容。

    有谁知道我缺少什么吗?我相信一旦我知道了就很简单,但现在我被卡住了。

    完整浏览器信息:Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:1.9.3a5pre) Gecko/20100602 Minefield/3.7a5pre

    2010 年 6 月 3 日 上午 3:50

  11. Gert

    哦,忘记提到 Microsoft 触摸板示例应用程序都正常工作。

    2010 年 6 月 3 日 上午 4:47

    1. Anders

      一直在进行研究。似乎您需要一个 Firefox 的特殊版本。有人知道在哪里可以找到它吗?

      2010 年 7 月 13 日 上午 7:44

      1. Gert

        您好,Anders,

        我通过在 http://felipe.wordpress.com/2009/08/21/sneak-peak-on-multitouch-events/#comment-1509 上的他的博客文章中发表评论,从 Felipe 那里获得了特殊版本。

        2010 年 7 月 14 日 上午 9:50

        1. Anders

          您好,Gert

          非常感谢。会试着玩玩的。我迫不及待地等待它最终发布。

          2010 年 7 月 14 日 下午 1:48

  12. Henrik

    您使用与 Webkit 用于多点触控手势(在 iPhone 上)不同的语法是否有原因?这些东西真的很酷,并且是未来发展的必备品……但作为一名开发人员,我真的希望围绕多点触控手势不会再发生浏览器大战。总有一天,它将成为事实上的输入方法,因此我们应该正确处理这些事情。

    Safari 多点触控语法的文档
    http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/HandlingEvents/HandlingEvents.html#//apple_ref/doc/uid/TP40006511-SW22

    2010 年 8 月 16 日 下午 8:06

  13. Priyank

    有史以来最棒的版本……我非常喜欢它……

    2012 年 10 月 29 日 下午 12:13

  14. Piyush

    这真是一个很棒的版本……喜欢它……

    2012 年 12 月 7 日 上午 5:29

本文的评论已关闭。