对某些人来说,这可能听起来像一个简单的问题,但我的编程技巧虽然很热情,却几乎不存在。
我希望有人可以提供帮助。
我正在尝试在以下垂直标签上延迟鼠标悬停事件,以便用户可以直接从标签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/
提前感谢您的帮助。
答案 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更改为您认为最适合您设计的任何时间范围。