Javascript 我在向jquery脚本添加延迟时遇到问题
我正在使用一个巨型菜单脚本,我从。它工作得很好,除了看到我的页面上有一些这样的功能外,我希望有一个延迟,用户必须在菜单打开之前将鼠标放在链接上 我知道我需要一个setTimeout()标记和一个clearTimeout(),当用户将鼠标从链接上取下时使用。我就是不知道该把这个放在哪里。我试着只是猜测一下,但不管我把它放在哪里,它似乎要么破坏了功能,要么就无关紧要了Javascript 我在向jquery脚本添加延迟时遇到问题,javascript,jquery,Javascript,Jquery,我正在使用一个巨型菜单脚本,我从。它工作得很好,除了看到我的页面上有一些这样的功能外,我希望有一个延迟,用户必须在菜单打开之前将鼠标放在链接上 我知道我需要一个setTimeout()标记和一个clearTimeout(),当用户将鼠标从链接上取下时使用。我就是不知道该把这个放在哪里。我试着只是猜测一下,但不管我把它放在哪里,它似乎要么破坏了功能,要么就无关紧要了 感谢您为我提供的任何帮助,非常感谢。基本思想是这样的 var timeout; $('#menuID').mouseenter(fu
感谢您为我提供的任何帮助,非常感谢。基本思想是这样的
var timeout;
$('#menuID').mouseenter(function(){
clearTimeout(timeout);
$(this).children().show();
}).mouseleave(function(){
timeout = setTimeout(function(){
$(this).children().hide();
},400);
});
请注意,制造商使用的方法与上述相同:
注意:在.js文件中,有两个变量可能需要微调:
使用此函数可以根据需要添加延迟
// Function declatation
var delay = (function()
{
var timer = 0;
return function(callback, ms)
{
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
用法:
delay(function()
{
// Do thing you want delayed
}, 1000 );
将1000
替换为要延迟的毫秒数
编辑
$("#menuitem").mouseenter(function()
{
delay(function()
{
if($(this).is(':hover'))
// Show menu
}, 1000 );
});
你能发布你尝试过的代码吗?这会使帮助变得更容易。是的!发布您尝试过的内容…查看以下内容:
megamenu.$anchorobj.bind…
?它将显示代码绑定到mousenter事件,类似地,它隐藏在mouseleve上。后者已经有一个延迟计时器-使用相同的策略。@sej397我试着像这样添加它megamenu.$anchorobj.bind(megamenu.revealtype==“click”?“click”:“mouseenter”,函数(e){setTimeout(function(){var menuinfo=jkmaemenu.megamenu[parseInt(this.getAttribute(“\u megamenupos”)])},2000)clearTimeout(menuinfo.hidetimer)//取消隐藏菜单计时器返回jkmagmenu.showmenu(e,parseInt(this.getAttribute(“\u megamenupos”))}
并且脚本不起作用,我非常喜欢您的delay()实现,但我认为这对OP没有帮助,因为他们仍然存在与setTimeout()相同的问题,因为他们不知道在哪里将其添加到现有代码中。我还认为,当用户将鼠标移出时,他们需要能够取消排队函数……将其用作mouseover
函数,当延迟结束时,检查鼠标是否仍悬停在其上$(“#menuitem”)。mouseenter(function(){delay(function(){if($(this).is(':hover')//做您想延迟的事情,1000); });代码>看起来不如评论好,我会做一个编辑我这样添加它:megamenu.bind(megamenu.revealtype==“click”?“click”:“mouseenter”,函数(e){delay(function(){if($(this).is(':hover'){var menuinfo=jkmaemenu.megamenu[parseInt(this.getAttribute('u megamenupos'))]clearTimeout(menuinfo.hidetimer)//取消隐藏菜单计时器返回jkmaemenu.showmenu(e,parseInt(this.getAttribute(“\u megamenupos”)))},1000);})
现在菜单根本不出现。
$("#menuitem").mouseenter(function()
{
delay(function()
{
if($(this).is(':hover'))
// Show menu
}, 1000 );
});