Javascript 延迟对象链可以在事件处理程序上使用吗?
我对Javascript/jQuery有些陌生(但不熟悉编程),所以请原谅我对这件事的无知。我已经看过了,但都没有解决我的问题 我的场景:我有一个用Javascript/jQuery编写的幻灯片。在本幻灯片中,我希望在用户将鼠标悬停在幻灯片上时显示控件(播放按钮、后退、前进),并在鼠标离开幻灯片区域时隐藏它们。按钮按预期显示和隐藏,但当我将鼠标悬停在其中一个按钮(也在幻灯片上)上时,它会消失(我知道这是因为幻灯片上的“mouseleave”) 我尝试将悬停事件处理程序添加到我的按钮中,以更改全局布尔值,这样,只有当该布尔值为false时,幻灯片显示控件才会隐藏(这意味着其中一个按钮的“鼠标指针”未触发)。然后我在“mouseleave”之前注册了“mouseenter”事件,但它不起作用 问题是:尽管在幻灯片的“mouseleave”事件之前触发了按钮的“mouseenter”事件,但事件处理程序回调的执行顺序相反。我不完全确定为什么会发生这种情况,但我知道这与Javascript中如何处理悬停事件有关 我读了一些关于延迟对象的文章,我想知道这是否是正确的方法 语法不正确,但我的想法大致如下:Javascript 延迟对象链可以在事件处理程序上使用吗?,javascript,javascript-events,jquery,jquery-deferred,Javascript,Javascript Events,Jquery,Jquery Deferred,我对Javascript/jQuery有些陌生(但不熟悉编程),所以请原谅我对这件事的无知。我已经看过了,但都没有解决我的问题 我的场景:我有一个用Javascript/jQuery编写的幻灯片。在本幻灯片中,我希望在用户将鼠标悬停在幻灯片上时显示控件(播放按钮、后退、前进),并在鼠标离开幻灯片区域时隐藏它们。按钮按预期显示和隐藏,但当我将鼠标悬停在其中一个按钮(也在幻灯片上)上时,它会消失(我知道这是因为幻灯片上的“mouseleave”) 我尝试将悬停事件处理程序添加到我的按钮中,以更改全局
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());
是否存在这样的组合事件处理程序和延迟对象的方法?或者,有没有比延迟对象更好的方法
提前谢谢
编辑:我刚刚遇到,但我不想使用插件来完成这项工作。不,这不是解决问题的方法 当鼠标进入幻灯片时,显示控件;当鼠标离开幻灯片时,隐藏控件,除非鼠标进入控件 要做到这一点,您将使用一个小的超时,并检查鼠标是否在隐藏控件之前进入控件
var timer;
$('#slide').on({
mouseenter: function() {
clearTimeout(timer);
$('.controls').show();
},
mouseleave: function() {
timer = setTimeout(function() { //don't hide them right away
$('.controls').hide();
}, 400); // set a timeout
}
});
$('.controls').on({
mouseenter: function() {
clearTimeout(timer); // if the mouse entered the controls,
}, // clear the timeout, keeping the controls visible,
mouseleave: function() {
timer = setTimeout(function() {
$('.controls').hide();
}, 400);
}
});
做同样事情的一个更简单的方法是将控件放在HTML中的
#slide
元素中,这样它们就不会触发mouseleave事件,但这并不总是可能的,也不方便。这两种解决方案都很好。在本例中,我实际上可以将其移动到包含HTML元素的位置。这太简单了,我都没想到。非常感谢你的帮助@Don-Yup,这是一个非常简单的答案,如果你没有使用任何javascript效果,或者可以使用CSS3效果,你甚至可以用css隐藏和显示控件,如果控件在幻灯片中(在HTML标记中),就不需要使用javascript。再次为真。有时,我太沉迷于Javascript了,以至于忘记了许多同样的事情都可以通过CSS3来完成。我真的很感谢你的帮助,太棒了。我对CSS动画不太感兴趣。这是一个很好的起点,有助于清理我的Javascript。你帮了大忙!感谢所有的例子!