Mootools:当其他事件发生时,如何停止事件

时间:2011-04-05 09:48:48

标签: events mootools mouseleave mouseenter

我有一个关于mootools事件处理的问题。

我想延迟一个用于下拉导航的mouseenter事件。 1秒后,drowdown列表将显示为“setStyle('display','block')...这是我到目前为止所做的,并且它正在工作:

$('main-nav').getElements('li.level-1 ul.quick-nav').setStyle('display', 'none');

                            $('main-nav').getElements('li.level-1').each(function(elem){
                               var list = elem.getElement('.quick-nav');

                                elem.addEvents({
                                    'mouseenter' : function(event){                                                                                     
                                        (function() {
                                            elem.getElement('.quick-nav').setStyle('display', 'block');
                                        }).delay(1000)},
                                    'mouseleave' : function(event){                                               
                                            elem.getElement('.quick-nav').setStyle('display', 'none');
                                        }
                                });
                            });

我已经延迟了使用延迟功能的mouseenter事件...我得到的问题仍然无法解决的问题是,当我已经离开导航项目时,mouseenter事件将会发生。我输入项目,立即离开项目,一秒钟后,子项目仍然出现。因此,我需要在mouseleave事件中进行某种检查,我的menuitem是否已经显示。然后我可以停止mouseenter事件,如果menuitem仍然不可见...我不知道如何从mouseleave事件的函数响应mousenter事件...希望有人理解这一点......

提前致谢。

1 个答案:

答案 0 :(得分:2)

在mouseleave上使用计时器和clearTimeout(在早期版本的mootools中也是$clear(timer))。

$('main-nav').getElements('li.level-1 ul.quick-nav').setStyle('display', 'none');

$('main-nav').getElements('li.level-1').each(function(elem) {
    var list = elem.getElement('.quick-nav');
    var timer;
    elem.addEvents({
        'mouseenter': function(event) {
            timer = (function() {
                elem.getElement('.quick-nav').setStyle('display', 'block');
            }).delay(1000)
        },
        'mouseleave': function(event) {
            clearTimeout(timer);
            elem.getElement('.quick-nav').setStyle('display', 'none');
        }
    });
});