【问题标题】:jQuery sliding panels - close one panel when opening another one/How to open one panel only?jQuery滑动面板 - 打开另一个面板时关闭一个面板/如何只打开一个面板?
【发布时间】:2016-02-21 15:21:52
【问题描述】:

我的 html 中有三个滑动面板。 问题是面板在打开时会相互重叠。 我想获得一个功能,当一个面板(例如#panel1)已经打开并且用户将单击另一个面板(#panel2)然后第一个面板(#panel1)将滑出时,可以创建一个事件一次只能打开一个面板。

有人可以帮我吗?

提前致谢。

HTML:

    <ul id="menu">
        <li><img id="icon_1" src="images/image1.png"></li>
        <li><img id="icon_2" src="images/image2.png"></li>
        <li><img id="icon_3" src="images/image3.png" ></li>
    </ul>

    <div id="panel1"></div>
    <div id="panel2"></div>
    <div id="top_panel"></div>

jQuery(#panel1 和#panel2 函数取自http://web.archive.org/web/20150227082803/http://www.jqeasy.com/jquery-slide-panel-plugin):

    $(document).ready(function(){
        $('#panel1').slidePanel({
            triggerName: '#icon_1',
            speed: 'slow'
    });
        $('#panel2').slidePanel({
            triggerName: '#icon_2',
            speed: 'slow'
        });   
    });

    $(document).ready(function(){
        $("#icon_3").click(function(){
            $("#top_panel").slideToggle("slow");
        });
    });

【问题讨论】:

  • 你试过clickOutsideToClose: true吗?
  • 是的,我试过了,但是当您在 div 面板外部单击时 clickOutsideToClose 会关闭面板,这并不能解决问题,因为所有面板都可以一起操作。

标签: javascript jquery


【解决方案1】:

这几行的东西。我希望您使用 data-* 属性来提供面板和图像之间的关系。根据条件跟进逻辑。

Javascript

$('#panel1').slidePanel({
    speed: 'slow',
    position: 'static'
});
$('#panel2').slidePanel({
    speed: 'slow',
    position: 'static'
});

$("[id^=icon]").click(function () {
    // Current active panel
    var $currPanel = $('#' + $(this).data('panel'));

    // Slideup all the other panels other than $currPanel
    $('.panel').not($currPanel).slideUp();
    // If $currPanel has no active class only then slide down
    if (!$currPanel.hasClass('current')) {
        $currPanel.slideDown("slow");
    }
    // Add class active to current panel
    $currPanel.addClass('current');
    // Remove class for other panels
    $('.panel').not($currPanel).removeClass('current');
});

HTML

<ul id="menu">
    <li>
        <img id="icon_1" src="images/image1.png" data-panel="panel1">
    </li>
    <li>
        <img id="icon_2" src="images/image2.png" data-panel="panel2">
    </li>
    <li>
        <img id="icon_3" src="images/image3.png" data-panel="top_panel">
    </li>
</ul>
<div id="panel1" class="panel"></div>
<div id="panel2" class="panel"></div>
<div id="top_panel" class="panel"></div>

Check Demo

【讨论】:

  • 我对jQuery不是很了解,现在正在学习。你知道如何创建一次只能打开一个面板的功能吗?
  • 你可以使用上面的代码。这将确保在单击图像时只有 3 个面板中的 1 个可见
  • 该代码正在打开面板并立即将其关闭。我想要实现的效果是用户可以通过单击菜单中的图标来打开一个面板,当用户单击另一个图标时,将关闭打开的一个并打开另一个一个分配给单击的图标。
  • @Lajon.. 检查更新的代码和小提琴.. 我在初始化时删除了 triggerName,以便我们可以拥有更多控制权
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
相关资源
最近更新 更多