我一直在玩Skyrocket Labs开发并由Peter Hinton改进的jDiv下拉菜单。它适用于同一页面上的多个菜单,只要您使用不同的标识符复制代码(#nav1触发器#hidden-menu1,#nav2触发器#hidden-nav2等)。
var hide1 = false;
$("#nav1").hover(function(){
if (hide1) clearTimeout(hide1);
$("#hidden-nav1").show();
}, function() {
hide1 = setTimeout(function() {$("#hidden-nav1").hide();});
});
$("#hidden-nav1").hover(function(){
if (hide1) clearTimeout(hide1);
}, function() {
hide1 = setTimeout(function() {$("#hidden-nav1").hide();});
$("#hidden-nav1").stop().show();
});
我正在尝试解决如何重写代码以便它“发现”链接悬停的navX的数值并触发相应的hidden-navX div。
答案 0 :(得分:4)
这是一个工作
JSFiddle DEMO
我删除了所有ID只是为了显示代码和功能的简单和条带,只需使用类。
如果您需要使用ID,可以撤消ID,但保持不变。
如果您需要有关代码的说明,我可以对每一行进行评论。
这是新的/更改过的Jquery:
$(document).ready(function() {
var countNavs = 0; $('#navlist li').attr('class', function() {countNavs++;return 'connected' + countNavs;});
var countDrops = 0; $('.dropdown').attr('class', function() {countDrops++;return 'dropdown connected' + countDrops;});
var hide1 = false;
$("#navlist li").hover(function(){
var equal = $(this).attr('class');
$('.active').removeClass();
if (hide1) clearTimeout(hide1);
$('.dropdown').hide();
$('.'+equal).not('li').show();
$(this).children('a').toggleClass('active');
}, function() {
hide1 = setTimeout(function() {$('.'+equal).not('li').hide();});
});
$('.dropdown').hover(function(){
if (hide1) clearTimeout(hide1);
}, function() {
hide1 = setTimeout(function() {$('.dropdown').hide();});
$('.active').removeClass();
$('.dropdown').stop().show();
});
});
为了帮助您理解几句:我们自动为每个'li'和他的同名“下拉列表”添加一个SAME自定义类:'。connectedctedN',其中'N'是递增的数字。<我们只是说:如果悬停的'li'是类'connected3',这意味着我们只是徘徊了第3个'li',我们将打开具有SAME类的'。dropdown'。
答案 1 :(得分:0)
尝试
function doNav(id) {
var hide = false;
$(id).hover(function() {
if (hide) clearTimeout(hide);
$("#hidden" + id).show();
}, function() {
hide = setTimeout(function() {
$("#hidden" + id).hide();
});
});
$("#hidden" + id).hover(function() {
if (hide) clearTimeout(hide);
}, function() {
hide = setTimeout(function() {
$("#hidden" + id).hide();
});
$("#hidden" + id).stop().show();
});
}
for (var i = 1; i < 4; i++) {
doNav("nav" + i);
}