Search code examples
cordovaonsen-ui

Onsen Multiple slide menu


Is it possible to add multiple slide menus to Onsen mobile application. I would need to have left and right menu. I even would like to have top and bottom slide menu but I think this is not possible.

I already try to copy and paste 2 menus but it's not woking only 1 menu is working.

<body>
    <!-- Cordova reference -->
    <script src="cordova.js"></script>
    <script src="scripts/index.js"></script>
    <!-- -->

    <ons-sliding-menu menu-page="menu.html" main-page="page1.html" side="left"
     var="menu" type="overlay" max-slide-distance="90%" swipeable="true" swipe-target-width="120px">
    </ons-sliding-menu>


    <ons-template id="menu.html">
        <ons-page modifier="menu-page">
            <ons-toolbar modifier="transparent"></ons-toolbar>

            <ons-list class="menu-list">
                <ons-list-item class="menu-item" ng-click="menu.setMainPage('page1.html', {closeMenu: true})">
                    <ons-icon icon="fa-plus"></ons-icon>
                    New page
                </ons-list-item>

        </ons-page>
    </ons-template>

    <ons-template id="page1.html">
        <ons-page>

            <ons-row style="text-align: center;">
                <ons-col>
                  Welcome
                </ons-col>
            </ons-row>
        </ons-page>
    </ons-template>

    <ons-template id="page2.html">
        <ons-page>
            <ons-toolbar>
                <div class="left">
                    <ons-toolbar-button ng-click="menu.toggle()">
                        <ons-icon icon="ion-navicon" size="28px" fixed-width="false"></ons-icon>
                    </ons-toolbar-button>
                </div>
                <div class="center">Page 2</div>
            </ons-toolbar>


            <ons-row style="margin-top: 100px; text-align: center;">
                <ons-col>
                    <ons-button modifier="light" ng-click="menu.toggleMenu()">
                        Toggle Menu
                    </ons-button>
                </ons-col>
            </ons-row>

        </ons-page>
    </ons-template>
</body>

Solution

  • You need to put one sliding menu inside another like this:

    <ons-sliding-menu main-page="page.html" menu-page="menu-left.html" side="left" max-slide-distance="85%" swipable="true" var="leftMenu">
    </ons-sliding-menu>
    
    <ons-template id="page.html">
      <ons-page>
      <ons-sliding-menu main-page="page1.html" menu-page="menu-right.html" side="right" max-slide-distance="85%" swipable="true" type="reveal" var="rightMenu">
      </ons-sliding-menu>
      </ons-page>
    </ons-template>
    

    Working here: http://codepen.io/frankdiox/pen/XbEzqq

    Hope it helps!