【发布时间】:2013-05-06 05:36:30
【问题描述】:
我对 Javascript / jQuery 有点陌生(但不是编程),所以请原谅对这件事的任何无知。我已经看过this question 和this one,但都没有解决我的问题。
我的场景:我有一个用 Javascript / jQuery 编写的幻灯片。在此幻灯片中,我想在用户将鼠标悬停在幻灯片上时显示控件(播放按钮、向后、向前),并在鼠标离开幻灯片区域时隐藏它们。按钮按预期显示和隐藏,但是当我将鼠标悬停在其中一个按钮(也在幻灯片上)时,它消失了(我知道这是因为幻灯片上的“鼠标离开”)。
我尝试将悬停事件处理程序添加到我的按钮以更改全局布尔值,以便只有在该布尔值为 false 时才会隐藏幻灯片控件(意味着未触发其中一个按钮的“mouseenter”)。然后我在“mouseleave”之前注册了“mouseenter”事件,但它不起作用。
问题出在这里:尽管在滑动的“mouseleave”事件之前触发了按钮的“mouseenter”事件,但事件处理程序回调在相反中执行> 订购。我不完全确定为什么会发生这种情况,但我知道这与 Javascript 中悬停事件的处理方式有关。
我阅读了一些有关延迟对象的信息,我想知道这是否是解决此问题的正确方法?
语法不正确,但我正在考虑以下内容:
function isMouseOverButton() {
if(mouseEnteredButtonEvent()) {
window.isOverButton = true;
} else {
window.isOverButton = false;
}
function hideControls() {
if(!window.isOverButton) {
//hide buttons
}
}
$.when($("#slide").mouseleave()).then(isMouseOverButton()).then(hideControls());
有没有像这样组合事件处理程序和延迟对象?或者,有没有比延迟对象更好的方法?
编辑:我刚刚遇到this,但我不想使用插件来完成此操作。
【问题讨论】:
标签: javascript jquery jquery-events jquery-deferred