1

我有个问题。我有这个菜单,点击时会出现下拉菜单,如果什么也没发生,我希望它在 5 秒后返回。我走到这一步了。但是有一个小故障,当我单击它返回时,它会在 5 秒后出现而无需询问。它是否可以检查它是否仍然可见然后返回,如果没有,保持冷静并继续?

这是代码:

$(document).ready(function () {
  $('#aktivs-share').click(function() {     
  $('#share').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#share').slideToggle('slow', function() {  });
}, 5000);
});
 $('#aktivs').click(function() {
  $('#valodas').slideToggle('slow', function() {  });
  setTimeout(function() {
  $('#valodas').slideToggle('slow', function() {  });     
 }, 5000); 
});
});
4

2 回答 2

1

您需要跟踪菜单所处的状态,如果菜单处于关闭状态,则使用 clearTimeout() 清除超时。

(代码未经测试,但希望你明白)

    var shareOpen = false;
    var shareTimeoutHandle = 未定义;
    $('#aktivs-share').click(function() {
        $('#share').slideToggle('slow', function() { });

        // 检查当前状态,如果已经打开,关闭并重置
        if (shareOpen) clearTimeout(shareTimeoutHandle);
        别的 {
            shareTimeoutHandle = setTimeout(function() {
                $('#share').slideToggle('slow', function() { });
            }, 5000);
        }
        // 将新状态设置为相反
        shareOpen = !shareOpen;
    });

于 2012-11-14T16:28:42.570 回答
0

记住 的返回值setTimeout,它是一个句柄,您可以使用它来取消它clearTimeout

在您的情况下,由于您想要做的事情不止一件事,因此最好将计时器句柄实际存储元素上,通过data.

您可能会考虑为自己编写一个插件方法来执行此操作,以避免重复逻辑。slideToggleAutoClose或者其他的东西。:-)

于 2012-11-14T16:15:16.560 回答