如何在垂直选项卡上延迟鼠标悬停事件

时间:2013-09-05 19:15:29

标签: javascript jquery html css tabs

对某些人来说,这可能听起来像一个简单的问题,但我的编程技巧虽然很热情,却几乎不存在。

我希望有人可以提供帮助。

我正在尝试在以下垂直标签上延迟鼠标悬停事件,以便用户可以直接从标签1转到标签4,而不会显示标签2和3。

以下是我正在使用的脚本:

$(function () {
var items = $('#v-nav>ul>li').each(function () {
$(this).mouseover(function () {
//remove previous class and add it to clicked tab
items.removeClass('current');
$(this).addClass('current');

$('#v-nav>div.tab-content').hide().eq(items.index($(this))).show();
window.location.hash = $(this).attr('tab');
});
});

if (location.hash) {
    showTab(location.hash);
}
else {
    showTab("tab1");
}

function showTab(tab) {
    $("#v-nav ul li:[tab*=" + tab + "]").mouseover();
}

// Bind the event hashchange, using jquery-hashchange-plugin
$(window).hashchange(function () {
    showTab(location.hash.replace("#", ""));
})

// Trigger the event hashchange on page load, using jquery-hashchange-plugin
$(window).hashchange();
});

我在另一个stackoverflow post中看到了类似的问题和解决方案,但无法弄清楚如何调整它以使其正常工作。

此处可以看到垂直标签的演示:http://jsfiddle.net/JAG72/tt7CK/6/

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

jsFiddle Demo

您需要做的是实现逻辑延迟。您可以通过检测要跟踪的元素的鼠标移动来执行此操作。在这种情况下,列表元素。当鼠标输出发生时,举起一个标志,该标志将成为延迟的触发器。在鼠标悬停中,如果该标志存在,则导致延迟。这需要对代码进行这些更改:

标志

var block = false;
var tabWait = -1;

鼠标移开

$('#v-nav>ul>li').mouseout(function(){
   block = true;
   setTimeout(function(){ block = false; },400);
});

鼠标悬停编辑

var me = this;
if(block){
 clearTimeout(tabWait);
 tabWait = setTimeout(function(){
  $(me).mouseover();
 },400);
 return;
}

我设置了400毫秒的延迟。您可以将两个地方的400更改为您认为最适合您设计的任何时间范围。