带有嵌套菜单/多级菜单的 JQuery Mobile 滑动面板 [英] JQuery Mobile Sliding Panel with nested menu/ multi-level menu

查看:18
本文介绍了带有嵌套菜单/多级菜单的 JQuery Mobile 滑动面板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我查看了插件在这里,几乎所有的都是对我来说使事情复杂化.我希望我可以重新创建 这个示例 使用现有 jquery 移动框架中的一些魔法作为 见这里

解决方案

左侧面板和子菜单:

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

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

  1. 子菜单 HTML 结构

  • CSS

    • 全高、全宽并位于页面外.

      .ui-sub-panel {宽度:100%;位置:绝对;顶部:0;左:-100%;最小高度:100%;最大高度:无;}

    • 打开子菜单

      .ui-sub-panel-open {-moz-transform: translate3d(100%, 0, 0);-webkit-transform: translate3d(100%, 0, 0);变换:translate3d(100%, 0, 0);}

    • 关闭子菜单

      .ui-sub-panel-close{-moz-transform: translate3d(0, 0, 0);-webkit-transform: translate3d(0, 0, 0);变换:translate3d(0, 0, 0);}

    • 关闭/打开动画

      .ui-sub-panel-animate {-webkit-transition: -webkit-transform 500ms 轻松;-moz-transition: -moz-transform 500ms 缓和;转换:转换 500 毫秒轻松;}

  • 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 () {$(这个).closest(".ui-sub-panel").addClass('ui-sub-panel-close ui-sub-panel-animate').removeClass("ui-sub-panel-open");});

  • <块引用>

    演示 (1)

    <小时><块引用>

    更新 1

    右侧面板和子菜单:

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

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

    <块引用>

    演示 (1)

    <小时>

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

    I have been working on multi-level menu's or sub-menu's on my jquery mobile and generally 3rd partly jquery plugins have been deeply messing with my CSS relating to position:fixed footer and scrolling.

    I looked at the plugin's here and almost all of them are complicating things for me. I was hoping I could recreate this example with some magic from the existing jquery mobile framework as seen here

    解决方案

    Left-hand Panel and submenus:

    Here is a fast solution just to give you an idea. It has big room for improvement, so I will update this answer whenever I do any changes.

    Create Submenus as much as you want, each one with a unique id and a close button with a class. Place Submenus inside main jQM panel.

    1. Submenu HTML structure

      <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

      • Full height, width and positioned outside page.

        .ui-sub-panel {
          width: 100%;
          position: absolute;
          top: 0;
          left: -100%;
          min-height: 100%;
          max-height: none;
        }
        

      • Open Submenu

        .ui-sub-panel-open {
          -moz-transform: translate3d(100%, 0, 0);
          -webkit-transform: translate3d(100%, 0, 0);
          transform: translate3d(100%, 0, 0);
        }
        

      • Close Submenu

        .ui-sub-panel-close{
          -moz-transform: translate3d(0, 0, 0);
          -webkit-transform: translate3d(0, 0, 0);
          transform: translate3d(0, 0, 0);
        }
        

      • Animate close/open

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

    3. JS

      • Close all submenus once main jQM panel is closed

        $("#externalpanel").on("panelbeforeclose", function () {
          $('#submenu1, #submenu2')
              .addClass('ui-sub-panel-close ui-sub-panel-animate')
              .removeClass("ui-sub-panel-open");
        });
        

      • Open first submenu

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

      • Open second submenu

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

      • Close Submenu where close button is clicked

        $('.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)


    Update 1

    Right-hand Panel and submenus:

    To position panel to right side, add data-position="right" attribute to panel div. Also, in .ui-sub-panel class, change left to right.

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

    Demo (1)


    (1) Tested on Safari - iPhone 5 iOS 7.0.6 & iPad 2 iOS 7.1

    这篇关于带有嵌套菜单/多级菜单的 JQuery Mobile 滑动面板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆