【问题标题】:JQuery Mobile Sliding Panel with nested menu/ multi-level menu带有嵌套菜单/多级菜单的 JQuery Mobile 滑动面板
【发布时间】:2014-01-02 18:41:10
【问题描述】:

我一直在我的 jquery 移动设备上处理多级菜单或子菜单,通常第三部分 jquery 插件已经深深地弄乱了我与position:fixed 页脚和滚动相关的 CSS。

我查看了plugin's here,几乎所有这些都使我的事情变得复杂。我希望我可以使用现有 jquery 移动框架中的一些魔法重新创建 this example seen here

【问题讨论】:

  • 您可以在面板内创建多个内容 div 并根据要求滑动它们。明天我给你举个例子。
  • @Omar 从你的提示中排队,我到了这里jsfiddle.net/UHYz9/9。问题是如何让一个面板覆盖在另一个面板上?
  • 是的,这正是我想要的。谢谢,请张贴作为答案,我会接受它
  • 顺便说一句,演示再次更新。我很高兴它有帮助,我会发布一个答案并更新它以提供更多功能:)

标签: javascript jquery jquery-mobile razor panel


【解决方案1】:

左侧面板和子菜单:

这里有一个快速的解决方案,只是为了给你一个想法。它有很大的改进空间,所以每当我做任何更改时,我都会更新这个答案。

根据需要创建子菜单,每个子菜单都有一个唯一的 id 和一个带有 class 的关闭按钮。将子菜单放在 jQM 主面板中。

  1. 子菜单 HTML 结构

    <div class='ui-sub-panel' id='submenu1'>
      <div class='ui-header' data-theme='a'>
        <a href='#' class='ui-btn ui-btn-right ui-btn-icon-notext ui-icon-delete panel-close'>Close</a>
        <h1 class='ui-title'>Submenu1</h1>
      </div>
      <div class="ui-content">
        <!-- submenu contents here -->
      </div>
    </div>
    
  2. CSS

    • 全高、全宽和页面外定位。

      .ui-sub-panel {
        width: 100%;
        position: absolute;
        top: 0;
        left: -100%;
        min-height: 100%;
        max-height: none;
      }
      
    • 打开子菜单

      .ui-sub-panel-open {
        -moz-transform: translate3d(100%, 0, 0);
        -webkit-transform: translate3d(100%, 0, 0);
        transform: translate3d(100%, 0, 0);
      }
      
    • 关闭子菜单

      .ui-sub-panel-close{
        -moz-transform: translate3d(0, 0, 0);
        -webkit-transform: translate3d(0, 0, 0);
        transform: translate3d(0, 0, 0);
      }
      
    • 动画关闭/打开

      .ui-sub-panel-animate {
        -webkit-transition: -webkit-transform 500ms ease;
        -moz-transition: -moz-transform 500ms ease;
        transition: transform 500ms ease;
      }
      
  3. JS

    • 关闭 jQM 主面板后关闭所有子菜单

      $("#externalpanel").on("panelbeforeclose", function () {
        $('#submenu1, #submenu2')
            .addClass('ui-sub-panel-close ui-sub-panel-animate')
            .removeClass("ui-sub-panel-open");
      });
      
    • 打开第一个子菜单

      $('.sub1').on('click', function () {
        $('#submenu1')
            .addClass('ui-sub-panel-open ui-sub-panel-animate')
            .removeClass("ui-sub-panel-close");
      });
      
    • 打开第二个子菜单

      $('.sub2').on('click', function () {
        $('#submenu2')
           .addClass('ui-sub-panel-open ui-sub-panel-animate')
           .removeClass("ui-sub-panel-close");
      });
      
    • 关闭点击关闭按钮的子菜单

      $('.panel-close').on('click', function () {
        $(this)
           .closest(".ui-sub-panel")
           .addClass('ui-sub-panel-close ui-sub-panel-animate')
           .removeClass("ui-sub-panel-open");
      });
      

Demo (1)


更新 1

右侧面板和子菜单:

要将面板定位到右侧,请将data-position="right" 属性添加到面板div。另外,在.ui-sub-panel 类中,将left 更改为right

.ui-sub-panel {
   ...
   right: -100%;
   ...
}

Demo (1)


(1) 在 Safari 上测试 - iPhone 5 iOS 7.0.6 和 iPad 2 iOS 7.1

【讨论】:

  • 是否可以捕获 panelbeforeclose 的事件并实际保持面板打开并在现有面板之上覆盖另一个面板而不是使用 div?此解决方案是一个不错的选择,但我只是在考虑实现解决方案的替代方法。
  • 在这种情况下,子菜单应该放在jQM主面板之外。一旦面板关闭,它们将被隐藏。您可以将它们保持打开但隐藏,一旦主面板打开,它们就会显示出来。如果这是您想要的,请跳过panelbeforeclose 部分。 @舒维克
  • 所以我尝试使用beforeclose 事件阻止面板关闭。不幸的是,我认为当一个面板打开而另一个需要打开时,jquery 事件是相关联的,第一个需要关闭。这可能是我收到 stackexceded 错误的原因。
  • @totalitarian 我会更新我的答案,请在 5 分钟后查看。
  • 完美!谢谢你的帮助。只是出于兴趣,是否可以记住单击覆盖后打开了哪个面板?我们在子面板 2 并单击内容区域以关闭所有面板,我们可以让它再次单击按钮将我们带回到同一个子菜单面板吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多