如何优化网站以适应触摸设备

67
在像iPhone/iPad/Android这样的触摸设备上,用手指点击小按钮可能很困难。据我所知,没有跨浏览器的方式可以使用CSS媒体查询检测触摸设备。因此,我会检查浏览器是否支持JavaScript触摸事件。直到现在,其他浏览器还没有支持它们,但是最新的Google Chrome在dev频道启用了触摸事件(即使对于非触摸设备)。我怀疑其他浏览器制造商也会跟进,因为带有触摸屏幕的笔记本电脑正在兴起更新:这是Chrome中的一个错误,所以现在JavaScript检测又可以正常工作了

这是我使用的测试:

function isTouchDevice() {
    return "ontouchstart" in window;
}

问题在于这只测试浏览器是否支持触摸事件,而不是设备本身。
有没有人知道如何以正确的方式提供触摸设备更好的用户体验?除了嗅探用户代理之外。
Mozilla有一个针对触摸设备的媒体查询。但我在其他任何浏览器中都没有看到类似的东西: https://developer.mozilla.org/En/CSS/Media_queries#-moz-touch-enabled 更新:我想避免为移动/触摸设备使用单独的页面/站点。解决方案必须通过JavaScript进行对象检测或类似方法来检测触摸设备,或者包含自定义触摸CSS而无需嗅探用户代理!我提问的主要原因是确保今天还不能实现,然后再联系css3工作组。所以如果您无法遵循问题中的要求,请不要回答;)

1
Chrome还没有确定他们将如何处理触摸事件。讨论请参见:http://code.google.com/p/chromium/issues/detail?id=36415 - gregers
1
你想知道浏览器是否支持触摸事件的原因是因为用户很难触摸到小按钮,对吧?所以,我猜你只是想为这些触摸设备放大UI元素? - David Murdoch
4
需要翻译的内容:Something else to keep in mind is hover events struggle on touch devices - this can makes some sites with hover menus almost impossible to navigate。需要翻译的内容:在使用触摸设备时,需要注意悬停事件可能会出现问题 - 这可能会使一些带有悬停菜单的网站几乎无法导航。 - cjk
在这成为支持媒体查询的情况之前,通过嗅探来实现这一点将是对http://www.modernizr.com/的极好补充。 - Brendan Heywood
5
我在这里写了一些关于检测技术的内容:http://modernizr.github.com/Modernizr/touch.html - Paul Irish
显示剩余4条评论
11个回答

-3

1
请在回答之前阅读问题 ;) “除了嗅探用户代理” - gregers
用户代理嗅探通常是一种有效的解决方案。我不明白为什么CSS3需要实现另一种解决方案,这将是多余的。 - Jonah
6
用户代理嗅探不具备未来的可持续性!一个经验法则是永远不要使用用户代理嗅探。它总会回过头来咬你一口。但是,对于触摸支持来说,使用用户代理是不可能的。用户代理字符串只包含浏览器和操作系统版本。那么,如何知道这是一台带有触摸屏幕的笔记本电脑还是没有触摸屏幕的电脑?举几个例子:联想S10-3t、宏碁1420P、惠普TouchSmart、戴尔XT2。Google Chrome和Firefox都在开发触摸支持功能。 - gregers
1
肯定特征检测是前进的新方式吧? - Stuart.Sklinar
用户代理嗅探仅适用于黑名单。例如,如果某个浏览器在从JavaScript查询时假装支持某些功能,但支持太过错误以至于无法在现实世界中使用,那么用户代理嗅探就可以用于检测错误版本。用户代理嗅探不适用于白名单,因为未来的用户代理(来自同一或不同的供应商)可能支持所需的功能,但由于UA未包含在您的白名单中,因此将无法“工作”。 - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接