我一直在玩飙升实验室开发的JDIV下拉菜单,并由Peter Hinton改进。对于在同一页面上的多个菜单上很好,只要用不同的标识符复制代码(#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的数值悬停并触发相应的隐藏NAVX DIV。

有帮助吗?

解决方案


这是一个工作的 jsfiddle demo

我删除了所有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'添加相同的自定义类,并调用以下代码的“下拉”,其中'.connectedn',
其中'n'是递增的数字。
比我们只是说:如果徘徊的'li'是'连接3',这意味着我们刚刚徘徊了第3个'li',我们将继续打开具有同一类的'.dropdown'。

其他提示

尝试

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);
}
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top