有没有什么方法可以在DOJO中禁用所有事件,直到某个事件完成?例如,我正在淡化元素,用户可以再次单击该事件,它将不会完成最后一个事件。
guz6ccqo1#
如果控制所有需要禁用的事件,可以尝试使用全局变量作为“锁”-在启动动画时将其设置为启用(如果发现触发了此标志,则使所有事件中止),并在动画结束时取消设置。Javascript不是并发的(所以你不需要担心时间问题和有一个“实际的”锁),但是也许淡出在幕后使用了setTimeout(允许其他事件在它完成之前触发)。如果是这种情况,只要记住你需要使用onEnd回调来正确地检测动画何时结束
var lock = false; function my_event_handler(evt){ if(lock) return; //someone else is using the lock; //perhaps cancel event propagation as well? lock = true; dojo.anim({ ... onEnd: function(){ lock = false; } }); }
警告:这是我脑海中的伪代码。如果你还没有注意到,我已经有一段时间没有使用dojo动画了:P
ckx4rj1h2#
我不确定我是否理解您在这里所说的事件是什么意思,但是如果您想防止与页面上的元素交互,您可以设置一个模态屏蔽...基本上是一个透明的DIV元素来捕获事件,以高z索引定位在您的内容上
2条答案
按热度按时间guz6ccqo1#
如果控制所有需要禁用的事件,可以尝试使用全局变量作为“锁”-在启动动画时将其设置为启用(如果发现触发了此标志,则使所有事件中止),并在动画结束时取消设置。
Javascript不是并发的(所以你不需要担心时间问题和有一个“实际的”锁),但是也许淡出在幕后使用了setTimeout(允许其他事件在它完成之前触发)。如果是这种情况,只要记住你需要使用onEnd回调来正确地检测动画何时结束
警告:这是我脑海中的伪代码。如果你还没有注意到,我已经有一段时间没有使用dojo动画了:P
ckx4rj1h2#
我不确定我是否理解您在这里所说的事件是什么意思,但是如果您想防止与页面上的元素交互,您可以设置一个模态屏蔽...基本上是一个透明的DIV元素来捕获事件,以高z索引定位在您的内容上