【问题标题】:Locking mouse events in cappuccino web application在卡布奇诺 Web 应用程序中锁定鼠标事件
【发布时间】:2012-12-08 16:09:54
【问题描述】:

在开发基于卡布奇诺框架的网络应用程序时, 只需在 Chromium 浏览器环境中运行(~ Chromium V.19 今年春季发布) 我遇到了以下问题:

我们希望应用程序在几秒钟内锁定或删除所有鼠标点击(同时应用程序执行一些后台计算)。

这个看似简单的任务似乎几乎是不可能的。 我们在整个屏幕上实现了一个Html-<div> 层并试图操纵它 mouseup、mousedown 处理程序,例如:

onmouseup="return false;"

onmousedown="return false;"

但这并没有显示任何结果。

还遍历实际 Cappuccino 窗口视图的所有 CPControl 子视图 并禁用它们

[subview setEnabled:NO];

并没有真正的帮助:

然后确实子视图被禁用(并且无法点击,正是我们想要的) 但太晚了:虽然我们在启动后台任务之前禁用了它们, 禁用效果在后台任务完成后生效,也是如此 不会阻止用户在合理的计算过程中做出愚蠢的点击。

我也尝试过实现类似的代码

[CPRunLoop limitDateForMode:CPDefaultRunLoopMode];

在禁用 CPControls 之后和开始后台任务之前,但它也不起作用。

那么有人对 Javascript-/Html 或 Cappuccino 有什么想法吗?

【问题讨论】:

    标签: javascript dom-events cappuccino


    【解决方案1】:

    CPWindow 有一个方法:setIgnoresMouseEvents:只需在您的窗口上调用它。

    【讨论】:

    • 感谢您的提示。不幸的是,我们有完全相同的种类
    • 感谢您的提示。不幸的是,在实现它之后,当我们如上所述禁用每个 CPControl 时,我们遇到了完全相同的问题:窗口在执行后台任务后锁定鼠标事件。还有 [CPRunLoop limitDateForMode:CPDefaultRunLoopMode];没有帮助。 (顺便说一句。我不清楚这种方法到底是做什么的,或者 Cappucc 一般如何实现“runloops”(这是一个 Objective-C 但不是 javascript 概念 - 有没有可用的解释?)。有没有人知道或对上述“时间问题”有帮助吗?谢谢。
    • 那么,首先,“后台任务”是什么意思?我认为您不是在谈论网络工作者(这是一个真正的“后台任务”),所以我只能得出结论,您的意思是一个需要很长时间才能执行的操作。所以你的问题是,当它正在执行时,用户只需点击一下,浏览器就会将事件排队等待下一个(javascript)运行循环。此外,Javascript 确实有一个运行循环……它不是特定于 Objective-C 的。也就是说,Cappuccino 也有自己的运行循环。
    • 你是对的,“后台任务”我的意思是持久(~3s)操作而不是网络工作者。感谢 JS-runloop 的提示。但我怎么能告诉卡普克。让上述禁用效果在那种后台任务开始之前生效,这是我的问题吗?提前致谢。
    • 好的,现在我可以用这种方式管理时间问题,我设置ignoresMouseEvents标志,然后将“后台任务”代码放入函数f中,设置为windows的输入参数.setTimeout(f,1)。现在禁用效果发生在后台任务开始之前,正是我们想要的!但是出现了另一个问题:再次将此标志设置为 false 后,禁用阶段的点击并没有真正被忽略!它们似乎存储在某种队列中,现在正在执行!这是我们绝对不想要的!我们如何才能清除那个“队列”?感谢您的任何想法。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多