2014-01-14 17 views
0

我试图解决一个包括用户打开菜单的错误,当他们进入Div1,Div2或Div3菜单关闭时,我的代码被执行。 test();函数应该运行代码,除非HMAnimState变量是真实的(或登录,这在这里不是真正的情况)。需要一种方法来模拟相同的鼠标在触发后(修复一个bug)

现在会发生什么情况是当他们进入选定的div并且他们在我的一个动画仍在运行时执行它,HMAnimState变量设置为true,之后它不能看到用户是否输入div因为它需要一种刷新,因为如果没有发生,屏幕停留在同一位置。

我试过用 setTimeout(function(){ test().mouseleave().mouseenter(); }, 1000); 但这不起作用。

从div移动到用户正在其他2 div工作的其中一个工作,但它是非常不切实际的。

$(".Div1, #Div2, #Div3").mouseenter(function test(){ 
    if (HMAnimState === true || HMAnimState === "LoginOverride") { 
     //Loop until HMAnimState is false 
     setTimeout(function(){ test().mouseleave().mouseenter(); }, 1000); 
     return false; 
    }else{ 
     // Hide div1 and other stuff 
    } 
}); 
+1

''.trigger(“mouseenter”)'工作吗? – Yannick

+0

是否有理由'Div1'是一个类,但是'Div2'和'Div3'是ID? – Barmar

+0

@Barmar是的,.Div1被多次使用,但所有其他div与该类隐藏,因此不受影响。 #Div2和#Div3是一次使用的单个div。 – Paradoxis

回答

1

我觉得更多的细节可能是有用的,但是从我的理解或许下面会工作。

每当您的事件触发且HMAnimState为真时,将请求推送到一个数组上。然后,当HMAnimState设置为false时,循环处理挂起的请求并执行它们。这假定你有一个事件监听器,并且知道何时HMAnimState被设置为false。

下面是这个想法的一个例子,我没有实际测试过这个。

var stack = []; 
$(".Div1, #Div2, #Div3").mouseenter(function test(){ 
    if (HMAnimState === true || HMAnimState === "LoginOverride") { 
     //push any metadata about this event you will need in order to execute 
     //this request later onto the stack 
     stack.push("div_mouseenter", this); 
     return false; 
    }else{ 
     // Hide div1 and other stuff 
    } 
}); 

//just a sample function I assume you have access to 
function onAnimationComplete() { 
    HMAnimState = false; 
    for(var i = 0; i < stack.length; ++i) { 
     handleRequest(stack[i]); 
    } 
} 
相关问题