javascript - 如何延迟 jquery 悬停事件

标签 javascript jquery html css

我正在尝试延迟 jquery 悬停事件。 下面的代码是我正在使用的代码。

$(document).ready(function(){

        $('ul.tabs li').hover(function(){
            var tab_id = $(this).attr('data-tab');

            $('ul.tabs li').removeClass('current');
            $('.tab-content').removeClass('current');

            $(this).addClass('current');
            $("#"+tab_id).addClass('current');
        })

    })

我尝试将其更改为以下代码,但无济于事。

 var delay=1000, setTimeoutConst;
    $('ul.tabs li').on('hover', function() {
         setTimeoutConst = setTimeout(function(){
               var tab_id = $(this).attr('data-tab');

        $('ul.tabs li').removeClass('current');
        $('.tab-content').removeClass('current');

        $(this).addClass('current');
        $("#"+tab_id).addClass('current');

         }, delay);
    }, function(){
         clearTimeout(setTimeoutConst );

      });

这是我的html代码

  <div class="container">

<ul class="tabs">
    <li class="tab-link current" data-tab="tab-1">Tab One</li>
    <li class="tab-link" data-tab="tab-2">Tab Two</li>
    <li class="tab-link" data-tab="tab-3">Tab Three</li>
    <li class="tab-link" data-tab="tab-4">Tab Four</li>
</ul>

<div id="tab-1" class="tab-content current">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
<div id="tab-2" class="tab-content">
     Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div id="tab-3" class="tab-content">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
</div>
<div id="tab-4" class="tab-content">
    Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>

我仍然是 jquery 的初学者,所以我不知道该怎么做。 一些帮助会很有帮助。 谢谢

最佳答案

使用 on('hover') 是个坏主意,您应该使用 .hover()on('mouseenter')on('mouseleave')

下面的代码对我有用,请注意你不能在超时函数中使用 this,将 id 存储到变量中可以解决这个问题。

如果鼠标在延迟到期之前离开,我假设您想取消超时,这就是为什么我删除 mouseleave 上的超时。

http://jsfiddle.net/k4wm1jr5/19/

var delay=1000, setTimeoutConst;
var tab_id, tab_id_this;

$(document).on("mouseenter", "ul.tabs li", function() {
     console.log("MOUSEENTER");
     tab_id = $(this).attr('data-tab');
     tab_id_this = $(this).attr('id');
     setTimeoutConst = setTimeout(function(){
               //Do whatever you like here
               //your code would be approximate like this:

               $('ul.tabs li').removeClass('current');
               $('.tab-content').removeClass('current');

               $("#"+tab_id_this).addClass('current');
               $("#"+tab_id).addClass('current');
      }, delay);
});
$(document).on("mouseleave", "ul.tabs li", function() {
    clearTimeout(setTimeoutConst );
});

on('hover') 是个坏主意,因为:

Deprecated in jQuery 1.8, removed in 1.9: The name "hover" used as a shorthand for the string "mouseenter mouseleave". It attaches a single event handler for those two events, and the handler must examine event.type to determine whether the event is mouseenter or mouseleave. Do not confuse the "hover" pseudo-event-name with the .hover() method, which accepts one or two functions.

参见 documentation .

关于javascript - 如何延迟 jquery 悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33141582/

相关文章:

javascript - 尽管在沙盒环境中工作良好,但我无法在生产环境中获得 token

html - 不同浏览器 HTML 对齐

c# - Ajax 传递空值但 Controller 在 ASP.NET MVC 中获取 null

javascript - 使 float 元素折叠

html - 我的导航栏两端有两种颜色的边框吗?

javascript - 使 JQuery 调用适用于所有 JSON 字段

javascript - 从原型(prototype)中的ajax请求获取高度

javascript - 表标题上的蒲公英数据表复选框

javascript - 使用jquery隐藏div

javascript - 当我在我的网页上提交表单时,URL 会立即更新其内容