javascript - Jquery Slide 面板 - 加载下一个面板时关闭原始面板

标签 javascript jquery html css

我正在尝试解决一些 jQuery 遇到的小问题。

基本上我需要的是,当一个面板打开时,如果用户点击另一个面板的触发器,那么原始面板将向上滑动并将新面板拉回原位。

您可以在 www.google-boost.co.uk 上看到我到目前为止的内容,这两个触发器将是导航菜单上最右边的两个图标。

JsFiddle: http://jsfiddle.net/4Nx6v

我的示例代码如下所示:

$(document).ready(function(){
    $(".btn-slide").click(function(){
        $("#panel").slideToggle("slow");
        $(this).toggleClass("active"); return false;
    });

        $(".btn-slide-two").click(function(){
        $("#panel2").slideToggle("slow");
        $(this).toggleClass("active"); return false;
    });

    if (!panel.is(':visible')) {
        $('.panel').hide(opts.speed);$('.btn-slide').removeClass('active');
    }
});

最佳答案

我个人的解决方案是通过数据属性连接链接和面板。这样您只需要一段代码并在链接之间共享一个类。

http://jsfiddle.net/TrueBlueAussie/4Nx6v/1/

链接是这样的:

<a href="#" class="btn-slider" data-target="#panel">

代码看起来像这样:

$(document).ready(function () {
    // Apply to all buttons of class btn-slider
    $(".btn-slider").click(function () {
        // remove active from all active links and collapse them
        $('.btn-slider.active').each(function () {
            var $link = $(this);
            $($link.attr('data-target')).slideUp("slow");
            $link.removeClass("active");
        });
        // Add active to the clicked link and slidedown the matching content
        $(this).addClass("active");
        $($(this).attr('data-target')).slideDown("slow");
        return false;
    });

    if (!panel.is(':visible')) {
        $('.panel').hide(opts.speed);
        $('.btn-slider').removeClass('active');
    }
});

这段代码可以再细化一点,但 2 分钟后的效果是怎样的 :)

更新:http://jsfiddle.net/TrueBlueAussie/4Nx6v/3/

根据切换的要求,这样稍微好一些:

$(document).ready(function () {
    $(".btn-slider").click(function () {
        var $clicked = $(this);
        $('.btn-slider.active').each(function () {
            var $link = $(this);
            // If this is not the clicked link, collapse its panel
            if (!$link.is($clicked)) {
                $($link.attr('data-target')).slideUp("slow");
                $link.removeClass("active");
            }
        });
        $clicked.toggleClass("active");
        if ($clicked.hasClass("active")) {
            $($clicked.attr('data-target')).slideDown("slow");
        } else {
            $($clicked.attr('data-target')).slideUp("slow");
        }
        return false;
    });

    if (!panel.is(':visible')) {
        $('.panel').hide(opts.speed);
        $('.btn-slider').removeClass('active');
    }
});

关于javascript - Jquery Slide 面板 - 加载下一个面板时关闭原始面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981085/

相关文章:

javascript - 如何在 Javascript 中使用 Promise 在一定时间间隔后打印日志

javascript - 将图标放在占位符中 - React Native

javascript - 带有填充属性的 SVG 矩形出现在包含元素插入框阴影的上方

javascript - 如何使用 javascript 遍历这个 json 数组

javascript - 如何使用 jQuery Mobile 向每个 URL 动态添加参数?

javascript - 仅显示每隔一条网格线

jquery - 如何通过字符串实例化 JQuery UI 小部件?

javascript - 通过Ajax加载Div时,有时点击不起作用

javascript - 如何使用 css 悬停在另一个元素和伪类上制作叠加层::之前

c# - HTMLAgilityPack 获取带有 id 属性的 td 标签的 innerText