0

我正在分析 Sencha Touch 应用程序,并发现单击按钮触发动作比单击 Ext.List 中的列表项更快。我的时间线分析数据表明该操作是在列表项的 Timer Fired 条件下执行的。这个定时器的超时时间是 300 毫秒。现在,对于按钮来说,没有计时器,因此一旦触摸结束(以及所有点击共有的其他 Sencha 处理),就会执行操作。

在我的例子中,动作是一个简单的过渡到另一个视图,没有任何动画。

以下是我在 iPhone 4 上运行时间线数据的应用程序的屏幕截图。

通过按钮单击/点击进行转换: 通过按钮单击/点击进行转换

通过列表项单击/点击转换: 通过列表项单击/点击进行转换

我试图深入研究源代码,但无法理解为什么会发生这种情况。我的假设是列表会等待 300 毫秒,以查看它实际上是点击动作还是滚动动作。但这是真的吗?如果不是,谁能指出我正确的方向来验证这个假设是否正确?

任何帮助将不胜感激!

4

3 回答 3

1

我认为是因为pressedDelay 配置,对于Ext.Button 默认是 0而对于Ext.DataView 是 100 ms

此外,按钮直接触发处理函数。dataView 执行 store.getAt(index) 找到记录对象并将其传递给 itemTap 回调,这增加了一些毫秒。

于 2013-08-09T19:30:44.570 回答
0

知道了!

这 300 毫秒不是因为滚动事件,而是要识别它是单击事件还是双击事件。如果您查看DoubleTap识别器源代码,它在配置对象中的 maxDuration 为 300 毫秒。这用于设置触发单击事件的超时时间。

onEnd 函数:

else {
            this.singleTapTimer = setTimeout(function() {
                me.fireSingleTap(e, touch);
            }, maxDuration);
        }

并且在每个 touchStart 事件上,都会清除此超时。

onTouchStart: function(e) {
        if (this.callParent(arguments) === false) {
            return false;
        }

        this.startTime = e.time;

        clearTimeout(this.singleTapTimer);
    },

需要注意的是,这是一个私有类,所以我们不能依赖它。但是,如果有人想减少点击事件和触发其逻辑之间的持续时间,请减少此时间。我注意到将其设置为 150 毫秒将使列表项的点击速度更快,但同时,它也为其他屏幕中的幽灵点击打开了空间,因为事件是排队的。

于 2013-08-14T20:13:16.980 回答
0

您可以在 Ext.application 中禁用或编辑识别器配置:http ://www.sencha.com/forum/showthread.php?205692-Reduce-delay-of-itemsingletap-on-xtype-list

于 2015-01-10T11:05:19.407 回答