1

我使用 jquery mobile 和 css 为我的 Phonegap 移动应用程序设计了一个自定义按钮。单击按钮时,只需切换开/关状态并更改 css 类。但是,在 iPhone/iPad/Android 设备上切换/更改太慢了。呈现切换的 CSS 的按钮有一些延迟。它在桌面浏览器上实际上非常快。

我在代码中所做的只是:

$("input[id='someid']").closest('div').removeClass("buttonUp ").addClass("buttonDown");
$("input[id='someid']").closest('div').removeClass("buttonDown").addClass("buttonUp");

CSS:

            .buttonDown {
                border:1px solid #000;font-weight:bold; cursor:pointer; text-shadow:0 1px 1px #000; text-decoration:none; background:#8FFFDD;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#8FFFDD), color-stop(100%,#72ccb1));background-image:-moz-linear-gradient(top, #72ccb1 0%, #8FFFDD 100%);background-image:-webkit-linear-gradient(top, #8FFFDD 0%,#72ccb1 100%);background-image:-o-linear-gradient(top, #8FFFDD 0%,#72ccb1 100%);background-image:-ms-linear-gradient(top, #8FFFDD 0%,#72ccb1 100%);background-image:linear-gradient(to bottom, #8FFFDD 0%,#72ccb1 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#8FFFDD', endColorstr='#72ccb1',GradientType=0 );color:#3D6AFF;
            }   


            .buttonUp {
                border:1px solid #000;font-weight:bold; cursor:pointer; text-shadow:0 1px 1px #000; text-decoration:none;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#DD3B1B), color-stop(100%,#b12f16));background-image:-moz-linear-gradient(top, #b12f16 0%, #DD3B1B 100%);background-image:-webkit-linear-gradient(top, #DD3B1B 0%,#b12f16 100%);background-image:-o-linear-gradient(top, #DD3B1B 0%,#b12f16 100%);background-image:-ms-linear-gradient(top, #DD3B1B 0%,#b12f16 100%);background-image:linear-gradient(to bottom, #DD3B1B 0%,#b12f16 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#DD3B1B', endColorstr='#b12f16',GradientType=0 );color:#000000;
            }

我尝试了“toggleClass()”但徒劳无功,对性能没有影响。

我该如何进一步优化呢?

谢谢你的帮助。

4

1 回答 1

3

这种延迟是故意放在那里的。它应该在 300 毫秒左右。

不管人们认为混合应用程序比原生应用程序有很多缺点。在这种情况下,问题是点击事件检测与滑动事件。如果两个动作都是即时应用程序无法识别什么是点击事件,什么是滑动动作的开始事件。由于此滑动操作需要具有优势,并且单击事件仅在持续至少 300 毫秒时才会起作用。

如果您将点击事件替换为vclick或 touchstart 事件,则可以修复它。此事件不受延迟问题的影响。

如果您想了解有关此内容的更多信息,请查看我关于 click/vclick/tap 事件之间差异的其他答案。可以在这里找到:在 jQuery mobile 中,tap 和 vclick 之间的区别是什么?

另一方面,如果你想保持一切原样,你也可以使用这个名为Fastclick的第 3 方 jQuery Mobile 插件来解决这个问题。它的作用是创建快速响应的按钮,没有鬼点击和烦人的300ms延迟。试试看,你可能会喜欢。

于 2013-07-11T07:01:53.057 回答