2013-08-01 34 views
0

我有一个容器,将显示/隐藏取决于点击链接。重新启用悬停与()

流量:

  • 点击菜单按钮,它示出了然后2秒定时器容器变淡容器内
  • 点击链接,并保持该容器再次衰落
  • 点击菜单按钮它允许容器再次褪色

奇怪的是,在最后一步之后,如果您悬停,然后鼠标移动容器它不会褪色。我试过了。我有一种感觉,我不打on()正确的。

我试过在$('.menu-control').on('click')内使用它来允许mouseleave,但我认为我需要定义它。

$('#module-container').on('mouseleave'); 

我已经尝试了一些其他方法,包括环绕整个悬停在一个函数中,命名它,把它被点击菜单按钮时。没有成功。

这将在视频播放作为背景的情况下实现,点击菜单按钮后会显示“选项”并淡入淡出。容器内的链接实际上会停止视频,淡入淡出,并停留在页面上。

HERE'S MY VERSION ON JSFIDDLE

回答

0

不能重新启用事件处理这样的。当您使用.off()时,它将从元素中移除指定的事件处理程序。因此,如果您想重新注册处理程序,则需要再次将处理程序参考传递给.on()方法。

,因为你需要使用handler基准多次,宁愿把它写一个独立的功能,以便它可以从多个地方被称为

你需要把它写这样

$('.menu-control').on('click', function() { 
    $('#module-container').fadeIn(300); 
    window.mtimer = setTimeout(function(){ $('#module-container').fadeOut(300); }, time); 
    //The following commented line doesn't work. I want to reallow the mousleave function, defined below (marked as HERE) 
    $('#module-container').on('mouseleave', mouseenter); 
}); 

function mouseenter(){ 
    clearTimeout(window.mtimer); 
} 
function mouseleave(){ 
    window.mtimer = setTimeout(function(){ $('#module-container').fadeOut(300); }, time); 
} 

var time = 2000; 
$('#module-container').on({ 
    mouseenter: mouseenter, 
    //HERE 
    mouseleave: mouseleave 
}); 

$('.stopme').on('click', function(e) { 
    $('#module-container').show().off('mouseleave'); 
    e.preventDefault(); 
});