我为今天刚刚上线的 iPad 2 信息亭开发了一个网络应用程序。几乎我们所有的客户都在使用触摸屏时遇到问题。他们正在敲击按钮,而应用程序没有记录触摸。
我从没想过用户与触摸屏交互会有这么大的困难。我想知道作为开发人员我是否可以做些什么来使这更加用户友好。触摸和实际注册之间有一点延迟——这使得用户更难知道他们按下了按钮。
我可以肯定地说,这些按钮很大——实际上可能比 iOS 指南中的要大(这又是一个 Web 应用程序——它不是用 Objective-C 编写的,而是用 PHP 和 jQuery 编写的)。所有操作都发生在 Web 应用程序中 - 使用简单的 UIWebView iOS 应用程序访问该应用程序,该应用程序只需连接到该站点。
澄清一下,有2个问题:
- 触摸根本不注册 - 客户在沮丧中越来越努力
- 对于已注册的触摸事件,存在滞后
感谢下面评论中的一些建议,最终将我带到了这个链接,我能够大大提高网络应用程序的响应能力。但我知道我的代码仍然可以改进。我的应用程序在任何主干 mvc 之外使用了主干.js 和 jquery 的组合。
这是我为防止默认的 touchend 行为而更改的 jquery 事件的示例(它最初是一个单击事件)。
$('body').on( 'touchend', '#s-id', function(event) {
event.preventDefault();
$('form[name=client-login]').submit();
});
还有一个主干视图的例子,它最初也使用了点击事件
var CounterView = Backbone.View.extend({
el: "body",
events: {
"touchend #b-q-prev": "qPrev",
"touchend #b-q-next": "qNext"
},
qNext: function(e){
e.preventDefault();
this.model.qIncrease();
this.qShow();
},
qPrev: function(e){
e.preventDefault();
this.model.qDecrease();
this.qShow();
},...etc...
实施这些技术解决了我的两个问题,因为该应用程序本质上并不关心您最初触摸按钮后所做的事情,一旦您释放它,它就会认为您触摸的原始按钮被按下。这允许我的客户使用随意的点击来触发事件。它也更快,解决了问题 2。
我不确定我是否正确实施了这一点。现在的一个主要缺点是,当我使用非触摸设备进行测试时,没有事件注册,因为我从 java 脚本中删除了所有点击事件。我是否应该查看多个事件,而不仅仅是阻止默认的触摸结束?根据我所做的研究,没有明确的解决方案 - 因为 jquery mobile 还没有实现它?