MobileSafari 的正确触摸按钮行为

Posted

技术标签:

【中文标题】MobileSafari 的正确触摸按钮行为【英文标题】:Proper touch button behavior for MobileSafari 【发布时间】:2012-01-17 16:50:31 【问题描述】:

MobileSafari 通常具有不正确的 html 按钮行为(错误含义:“不像 ios 原生按钮”)。正确的按钮行为如下:

用户触摸按钮:按钮突出显示 用户将手指拖出按钮:按钮变暗 用户将手指拖回按钮:按钮突出显示 用户将手指拖出按钮并释放:按钮不点击

MobileSafari 按钮在您触摸它们时会突出显示,无论您移动到哪里都保持突出显示,并且无论您在哪里释放它们都单击(除非视图滚动,在这种情况下,触摸始终会被取消,即使您重新输入按钮也是如此)。

此问题适用于所有可点击的内容,例如链接(当-webkit-touch-callout 设置为none 时)。到目前为止,我只找到了一个具有正确按钮行为的 Web 应用程序:Facebook。查看他们的代码,看起来他们已经完成了很多跳跃以使其正常工作(手动跟踪所有鼠标事件,根本不使用按钮)。代码很密集,使用 Javelin,我还不清楚使它工作所需的所有部分。

我知道我有点自欺欺人(因为如果这很容易,每个人都会这样做),但我还是要问。是否有任何普遍可用的代码可以处理此功能?有没有比逆向工程 Javelin 更简单的解决方案,即使它只适用于 WebKit? (Javelin 不太适合我的轻量级需求。)我的最终目标是为嵌入本机应用程序的 UIWebView 提供正确的按钮行为,因此混合 javascript/ObjC 解决方案也是可以接受的(尽管没有混合方法出现记住)。

【问题讨论】:

【参考方案1】:

基本上,您想要做的是为触摸设备构建某种混合悬停功能,该功能可检测您的手指何时移入/移出相关按钮。

我构建了一个基本的 JSFiddle,它实现了一些准系统功能。如果你知道任何javascript,我想你会明白的。

Live JSFiddle DEMO

在您的 iOS 设备(也可能是您的 android 设备??)上尝试一下。

- 布莱恩

【讨论】:

我尽量避免为我在这个特定应用程序中使用的一点点网络添加(和学习 :D)JQuery,但你的演示实际上非常棒。谢谢。我需要多玩一些,因为我发现它在 MobileSafari 中的行为有点古怪(有时它会在您认为它不会触发时触发,有时它不会完全正确地重置)。但是基础知识非常有趣。我不得不重新考虑避免使用 JQuery,因为我最近一直在与手写 JavaScript 作斗争。 是的,当您向上/向下滚动时有点不稳定。它当然不会涵盖所有边缘情况,但水平移入/移出按钮效果很好。学习 jQuery 的最佳方式实际上就是打开一个 JSFiddle 并开始使用 HTML 元素。

以上是关于MobileSafari 的正确触摸按钮行为的主要内容,如果未能解决你的问题,请参考以下文章

移动 Safari - 输入插入符号不会随着溢出滚动一起滚动:触摸

我在可可触摸应用程序中的按钮没有正确返回我的位置

按钮悬停效果和触摸 (WPF)

即使两个按钮同时触摸,单元格内的两个按钮也会接受触摸

六libinput功能介绍(二触摸板软件按钮及模拟鼠标中键)

六libinput功能介绍(二触摸板软件按钮及模拟鼠标中键)