在悬停时为此jquery添加延迟

时间:2010-01-24 00:45:55

标签: jquery css hover mousehover

我正在使用此代码:

var timeout    = 500;
var closetimer = 0;
var ddmenuitem = 0;

function navBar_open()
{  navBar_canceltimer();
   navBar_close();
   ddmenuitem = $(this).find('ul').css('visibility', 'visible');}

function navBar_close()
{  if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}

function navBar_timer()
{  closetimer = window.setTimeout(navBar_close, timeout);}

function navBar_canceltimer()
{  if(closetimer)
   {  window.clearTimeout(closetimer);
      closetimer = null;}}

$(document).ready(function()
{  $('#navBar > li').bind('mouseover', navBar_open) //mouseover
   $('#navBar > li').bind('mouseout',  navBar_timer)}); //mouseout

document.onclick = navBar_close;

工作正常

我想做的是为鼠标悬停事件添加延迟

我说实话,我在其他网站上发现了这个代码,并不完全理解它是如何工作的。

当用户将鼠标移出时,我会调用navBar_timer函数,这会在再次隐藏下拉菜单之前添加某种延迟,但我还没有看到如何在鼠标悬停时实现悬停。

任何指导都将不胜感激

感谢

6 个答案:

答案 0 :(得分:2)

您使用的是什么版本的Jquery?如果您使用新的(1.4),您应该能够利用新的$.delay()功能。然后,您需要更改的是navBar_open()中的一行:

ddmenuitem = $(this).find('ul').delay(timeout).css('visibility', 'visible');

答案 1 :(得分:1)

尝试更改此内容:

$(document).ready(function()
{  $('#navBar > li').bind('mouseover', navBar_open) //mouseover
   $('#navBar > li').bind('mouseout',  navBar_timer)}); //mouseout

对此:

$(document).ready(function() {
    $('#navBar > li').hover(function() {
        closeHoverTimer = window.setTimeout(navBar_open, 500); //500ms timeout);
    }, function() {
        navBar_timer();
        window.clearTimeout(closeHoverTimer);
    });
});

答案 2 :(得分:1)

答案 3 :(得分:1)

这样的东西可以用jquert 1.4及以上版本来完成。不需要hoverIntent插件:

$("#yourdiv").hover(function(){
    $(this).stop(true).delay(400).animate({"height":"300px"},800, "easeOutBounce");
},function(){
    $(this).stop(true).animate({"height":"25px"}, 300, "easeOutBack");
});

只需在stop元素后添加延迟函数即可。如果将鼠标悬停在元素上,则会在展开菜单之前等待400毫秒。如果在400ms时间范围之前将鼠标移出元素,菜单将无法打开。

答案 4 :(得分:0)

我是第二个Reigel建议使用hoverIntent插件。 为了延迟其他jquery函数,我倾向于使用这个函数:

  var delay = (function(){
    var timer = 0;
    return function(callback, ms){
      clearTimeout (timer);
      timer = setTimeout(callback, ms);
    };
  })();

并称之为:

delay (function () {
    // add whatever function you want delayed by 2 secs
}, 2000);

答案 5 :(得分:0)

这也应该有效:

    $('#navBar > li').hover(
        function() {
            var newthis = $(this);
            timer = setInterval(function() {showTip(newthis)}, delay);
        },
        function() {
            clearInterval(timer);
            $(this).find('ul:visible').fadeOut(speed);
        },
        showTip = function(newthis) {
            clearInterval(timer);
            newthis.find('ul:hidden').fadeIn(speed);
        }
    );