Jquery 设置超时禁用
我有个问题。我有这个菜单,点击下拉菜单,我希望它回到5秒后,如果没有发生任何事情。我走了这么远。但有一个小问题,当我点击它返回时,它在5秒后出现,没有询问。它是否可以检查它是否仍然可见,然后返回,如果没有,请保持冷静并继续 代码如下:Jquery 设置超时禁用,jquery,settimeout,slidetoggle,Jquery,Settimeout,Slidetoggle,我有个问题。我有这个菜单,点击下拉菜单,我希望它回到5秒后,如果没有发生任何事情。我走了这么远。但有一个小问题,当我点击它返回时,它在5秒后出现,没有询问。它是否可以检查它是否仍然可见,然后返回,如果没有,请保持冷静并继续 代码如下: $(document).ready(function () { $('#aktivs-share').click(function() { $('#share').slideToggle('slow', function() { }); s
$(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);
});
});
记住
setTimeout
的返回值,它是一个句柄,您可以通过它来取消它
在您的情况下,由于您想用不止一件事情来完成它,所以最好将计时器句柄实际存储在元素上,via
您可以考虑编写一个插件方法来实现这一点,以避免复制逻辑。代码>滑动开关关闭或其他东西。:-)
记住setTimeout
的返回值,它是一个句柄,您可以通过它来取消它
在您的情况下,由于您想用不止一件事情来完成它,所以最好将计时器句柄实际存储在元素上,via
您可以考虑编写一个插件方法来实现这一点,以避免复制逻辑。代码>滑动开关关闭或其他东西。:-)
您需要跟踪菜单所处的状态,然后在菜单关闭时使用clearTimeout()清除超时 (代码未经测试,但希望您能理解) var shareOpen=false; var shareTimeoutHandle=未定义; $(“#aktivs共享”)。单击(函数(){ $('#share').slideToggle('slow',function(){}); //检查当前状态,如果已打开,则关闭并重置 if(shareOpen)clearTimeout(shareTimeoutHandle); 否则{ shareTimeoutHandle=setTimeout(函数(){ $('#share').slideToggle('slow',function(){}); }, 5000); } //将新状态设置为相反的状态 shareOpen=!shareOpen; });您需要跟踪菜单所处的状态,然后在菜单关闭时使用clearTimeout()清除超时 (代码未经测试,但希望您能理解) var shareOpen=false; var shareTimeoutHandle=未定义; $(“#aktivs共享”)。单击(函数(){ $('#share').slideToggle('slow',function(){}); //检查当前状态,如果已打开,则关闭并重置 if(shareOpen)clearTimeout(shareTimeoutHandle); 否则{ shareTimeoutHandle=setTimeout(函数(){ $('#share').slideToggle('slow',function(){}); }, 5000); } //将新状态设置为相反的状态 shareOpen=!shareOpen; });
尝试
clearTimeout()
您可以设置一个变量,然后在回调函数中清除它$(#valodas').slideToggle('slow',function(){});尝试clearTimeout()
您可以设置一个变量,然后在回调函数中清除它$(#valodas').slideToggle('slow',function(){})+以1为例。请注意,您可以将您的shareOpen
和shareTimeoutHandle
组合在一起0
不是有效的计时器句柄,因此只需在shareTimeoutHandle
中使用0作为“关闭”标志即可!0表示它是开放的。要做到这一点,请确保在计时器启动时将其清除。例如+1。请注意,您可以将您的shareOpen
和shareTimeoutHandle
组合在一起0
不是有效的计时器句柄,因此只需在shareTimeoutHandle
中使用0作为“关闭”标志即可!0表示它是开放的。要做到这一点,请确保在计时器启动时将其清除。
var shareOpen = false;
var shareTimeoutHandle = undefined;
$('#aktivs-share').click(function() {
$('#share').slideToggle('slow', function() { });
// check the current state, if open already, close and reset
if (shareOpen) clearTimeout(shareTimeoutHandle);
else {
shareTimeoutHandle = setTimeout(function() {
$('#share').slideToggle('slow', function() { });
}, 5000);
}
// set the new state to be the opposite
shareOpen = !shareOpen;
});