【问题标题】:delay hover method [duplicate]延迟悬停方法[重复]
【发布时间】:2011-03-19 23:29:16
【问题描述】:

大家好,我想在这个函数中延迟悬停方法

$(document).ready(function(){
$(".wypWedkarskie li").filter(":odd").hide().end().filter(":even").hover(
  function () {
    $(this).toggleClass("active")
      .next().stop(true, true).slideToggle();
  });
});

我需要做什么??

【问题讨论】:

  • 延迟是什么意思?不触发悬停,除非用户在元素上停留了最短时间,或者只是在触发回调之前稍等片刻,但如果用户的鼠标悬停一瞬间,仍然触发回调?

标签: jquery hover delay


【解决方案1】:

如果您想在悬停时延迟某个动作,可以使用 javascripts .setTimeout() 添加 x 秒的延迟。

试试这个,它将隐藏列表中的所有奇数项,然后为所有偶数项添加悬停效果,悬停时会立即切换活动类,两秒钟后它将切换下一个对象

$(".wypWedkarskie li").filter(":odd").hide().end().filter(":even").hover(
    function() {
        var obj = $(this);
        var nextObj = obj.next();

        obj.toggleClass("active");
        setTimeout(function() {
            nextObj.slideToggle();
        }, 2000);
    }
);

你可以看到一个工作的demo here


更新:

这应该会给你我相信你所追求的东西。
它会立即突出显示您悬停的项目。 2 秒后,如果您仍然悬停,它将显示第二个项目。一旦您停止悬停,它将隐藏第二个项目。如果您在 2 秒前停止悬停,则不会显示第二项:

$(".wypWedkarskie li").filter(":odd").hide().end().filter(":even").hover(
    function() {
        var obj = $(this);
        var nextObj = obj.next();
        obj.addClass("active");
        setTimeout(function() {
            if (obj.hasClass('active')) {
                nextObj.slideDown();
            }
        }, 2000);
    },
    function() {
        var obj = $(this);
        var nextObj = obj.next();
        obj.removeClass('active');
        nextObj.slideUp();
    }
);

查看工作中的demo here

【讨论】:

  • 你太棒了,这对你帮助很大,非常感谢
【解决方案2】:

查看hoverIntent。是一个插件,它试图确定用户是否要将鼠标放在一个元素上,或者是否只是将鼠标移过它。

祝你好运!

【讨论】:

  • 我知道这一点,但我不知道如何结合它和 hoverIntent 它自己工作不同
  • 它的工作方式并没有什么不同。正如您在插件的演示中看到的那样,它取代了悬停。您可以像使用悬停一样使用它。但似乎你需要一些不同的东西。你为什么不解释你想用更多细节做什么?
  • 我有一个清单
  • SZWECJA
  • 挪威
  • 我想在鼠标悬停时显示/隐藏
  • mouseout
  • 元素
  • 对不起格式化我不知道如何打破线LOL
  • 【解决方案3】:

    更正后的代码低于水平线

    使用 jQuery 的 delay 函数。这将等待一段时间,然后再执行在它之后调用的任何方法。例如:

    $(this).delay(1000).toggleClass("active")
          .next().stop(true, true).slideToggle();
    

    在切换 active 类、停止下一个兄弟动画等之前将等待 1 秒的延迟。


    编辑:Doh!我误解了 jQuery 的delay。那么你可以使用setTimeout()

    $(document).ready(function(){
        $(".wypWedkarskie li").filter(":odd").hide().end().filter(":even").hover(function () {
            el = this;
            setTimeout(function() {
                $(el).toggleClass("active")
                    .next().stop(true, true).slideToggle();
            }, 1000);
        });
    });
    

    JSFiddle here

    【讨论】:

    • 我认为你误解了 .delay() 的作用。它不会延迟链接的方法,它会向已链接到对象的jQuery effects 添加延迟。 Take a look here 在一个小演示中了解延迟的作用。希望对您有所帮助。
    • 很抱歉。我发布了使用 setTimeout() 的代码的更正版本。
    • 我以为我想做你刚刚写的,但我不想,我想延迟所有功能而不仅仅是.hover 部分
    • 你想延迟所有的功能吗?请您再解释一下好吗?您的意思是您不想在页面加载后的某个时间之前设置悬停效果?
    • 我想在鼠标悬停“li:even”元素后例如 5 秒后触发整个函数,并在鼠标移出“li:even”元素时立即触发它,这样当我将鼠标悬停时2 秒内它根本不会触发
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签