我有一个关于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事件...希望有人理解这一点......
提前致谢。
答案 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');
}
});
});