5

我有一台带有 24" 触摸屏的 Ubuntu 机器,它工作正常。我可以移动鼠标,用几个触摸点做手势等等,所以硬件工作正常。现在我想知道是否可以让浏览器解释事件为触摸而不是鼠标按下、鼠标拖动等。HTML5 对触摸和多点触摸的支持非常好,我想为此设置开发 Web 应用程序。有人知道如何做到这一点吗?我试过启用--enable-touch-events 切换没有成功,不过好像只有ms windows版本才实现的。

~$ xinput -version
xinput version 1.6.0
XI version on server: 2.2

~$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Advanced Silicon S.A CoolTouch(TM) System id=9    [slave  pointer  (2)]
⎜   ↳ USBest Technology SiS HID Touch Controller    id=10   [slave  pointer  (2)]
⎜   ↳ Logitech USB Optical Mouse                id=11   [slave  pointer  (2)]
⎜   ↳ MCE IR Keyboard/Mouse (nuvoton-cir)       id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ CHICONY HP Basic USB Keyboard             id=12   [slave  keyboard (3)]
    ↳ Nuvoton w836x7hg Infrared Remote Transceiver  id=13   [slave  keyboard (3)]

我已经阅读了有关使用 touch-UI 标志进行构建的信息,但我不确定它会有所帮助吗?

4

2 回答 2

2

Chrome 在使用 GTK 构建时不支持 Linux 上的触摸屏。从 Chrome 35 开始,Linux 不再使用 GTK,而是建立在 Windows 和 ChromeOS 上使用的相同 UI 框架(“Aura”)之上。这意味着它现在应该正确支持触摸屏(尽管我经常在 Ubuntu 中看到触摸屏错误 - 尤其是在使用多个显示器时)。

于 2014-07-24T13:55:11.850 回答
1

请参阅 http://www.html5rocks.com/en/mobile/touchandmouse/ 以获得对您问题的良好答案。

你说

我尝试启用 --enable-touch-events 开关

您是否使用该命令行开关启动了 chrome?

也许您指的是以下内容,因为您想接收真实的触摸事件,所以在您的情况下使用它不会是错误的。

https://developers.google.com/chrome-developer-tools/docs/mobile-emulation#emulate-touch-events

尝试在 JavaScript 控制台中为您感兴趣的任何事件类型安装一个小事件处理程序(见下文)。

["click", "mousemove", "touchmove"].forEach(function(value, index, object) {
    document.addEventListener(value, function(event) {
        console.log(JSON.stringify([event.type,
            event.srcElement.localName + (event.srcElement.id ? '#'
            + event.srcElement.id : "")
            + (event.srcElement.classList.length ? '[class='
            + event.srcElement.classList + ']' : ""),
            (new Date(event.timeStamp)).toJSON()]));
    }, false);
});

这有帮助吗?

于 2013-05-03T13:40:16.177 回答