【问题标题】:add delay to this jquery on hover在悬停时向此 jquery 添加延迟
【发布时间】:2010-01-24 00:45:55
【问题描述】:

我正在使用此代码:

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 函数,这会在下拉菜单再次隐藏之前添加某种延迟,但我不太明白如何在鼠标悬停时实现悬停。

任何指导将不胜感激

谢谢

【问题讨论】:

    标签: jquery css hover mousehover


    【解决方案1】:

    您使用的是什么版本的 Jquery?如果您使用的是新的 (1.4),您应该能够利用新的 $.delay() 函数。那么您只需将navBar_open() 中的一行更改为:

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        尝试改变这一点:

        $(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);
            });
        });
        

        【讨论】:

        • 这是有道理的,但不幸的是它完全破坏了悬停效果..感谢您的宝贵时间
        【解决方案4】:

        这样的东西可以用 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");
        });
        

        只需在停止元素后添加延迟功能。如果您将鼠标悬停在元素上,它会在展开菜单之前等待 400 毫秒。如果在 400 毫秒时间帧之前将鼠标移出元素,菜单将不会打开。

        【讨论】:

          【解决方案5】:

          我赞同 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);
          

          【讨论】:

            【解决方案6】:

            这应该也可以:

                $('#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);
                    }
                );  
            

            【讨论】:

              猜你喜欢
              • 2011-12-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-17
              • 2019-07-02
              • 2014-07-11
              • 2010-09-30
              相关资源
              最近更新 更多