Click here to Skip to main content
15,881,709 members
Articles / Programming Languages / Javascript

Navigation Bar With Context Menu

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
16 Jan 2012CPOL1 min read 21.5K   4  
How to add a Context Menu to a Navigation Bar

In this post, we are going to show you how to add a Context Menu to a Navigation Bar. The context menu will have two items. The first context menu item’s task will be to expand a navigation bar item. The second menu item will collapse a navigation bar item. The context menu should be opened when the user right clicks an item in the Navigation Bar.

HTML
<link rel="stylesheet" href="jqx.base.css" type="text/css" />
<link rel="stylesheet" href="jqx.summer.css" type="text/css" />
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="jqwidgets/jqxcore.js"></script>
<script type="text/javascript" src="jqwidgets/jqxmenu.js"></script>
<script type="text/javascript" src="jqxexpander.js"></script>
<script type="text/javascript" src="jqxnavigationbar.js"></script>
HTML
<div id='jqxMenu'>
    <ul>
        <li>Expand</li>
        <li>Collapse</li>
    </ul>
</div>

<div id="jqxNavigationBar">
    <div>
        Contacts
    </div>
    <div>
        <div style="padding: 15px">Business Cards</div>
    </div>
    <div>
        Tasks
    </div>
    <div>
        <div style="padding: 15px">Phone list</div>
    </div>
    <div>
        Notes
    </div>
    <div>
        <div style="padding: 15px">Icons</div>
    </div>
</div>

The first div tag represents the context menu’s HTML structure. The second div with id “jqxNavigationBar” contains the jqxNavigationBar HTML structure.

JavaScript
var contextMenu = $("#jqxMenu").jqxMenu(
  { width: '120px', height: '56px', autoOpenPopup: false, mode: 'popup', theme: ‘summer’ });

In order to use the jqxMenu widget as a context menu, we set its ‘mode’ property to ‘popup’. The ‘autoOpenPopup’ property specifies whether the context menu should replace the default browser’s context menu. In this scenario, we want to open the context menu only when the user right clicks an item in the Navigation Bar.

JavaScript
$("#jqxNavigationBar").jqxNavigationBar
({ width: 250, height: 420, theme: ‘summer’, expandMode: 'multiple' });
JavaScript
$(".jqx-expander-header").bind('mousedown', function (event) {
    var rightClick = isRightClick(event);
    if (rightClick) {
        var scrollTop = $(window).scrollTop(),
            scrollLeft = $(window).scrollLeft();
        contextMenu.jqxMenu('open', parseInt(event.clientX) + 5 + scrollLeft, 
               parseInt(event.clientY) + 5 + scrollTop);
        // save the index of the clicked item.
        itemIndex = getItemIndex($(event.target));
    }
});

function getItemIndex(item) {
    var items = $('#jqxNavigationBar').find('.jqx-expander-header');
    for (var i = 0; i < items.length; i += 1) {
        if ($(items[i]).text() === item.text()) {
            return i;
        }
    }
    return -1;
}

In the event handler, we call either ‘expandAt’ or ‘collapseAt’ method to expand or collapse a Navigation Bar item.

JavaScript
$("#jqxMenu").bind('itemclick', function (event) {
    var item = $(event.args).text();
    switch (item) {
        case "Expand":
            $('#jqxNavigationBar').jqxNavigationBar('expandAt', itemIndex);
            break;
        case "Collapse":
            $('#jqxNavigationBar').jqxNavigationBar('collapseAt', itemIndex);
            break;
    }
});
  1. Add references to the JavaScript and CSS files
  2. Add the HTML structure for the Menu and Navigation Bar widgets in the document’s body
  3. Initialize the Context Menu
  4. Initialize the Navigation Bar
  5. Open the Context Menu when the user right clicks a navigation bar item and save the clicked item’s index
  6. Select the ‘jqxMenu’ element and trigger the ‘itemclick’ event. The ‘itemclick’ event is raised when a menu item is clicked

This article was originally posted at http://www.jqwidgets.com/navigationbar-with-context-menu

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
jQWidgets
United States United States
jQWidgets specializes in the development of platform independent and cross-browser compatible presentation layer components for building modern web-based applications for PC, Touch and Mobile. Our product provides developers with the essential set of User Interface widgets needed to streamline their development and reduce project costs.
Our goal is to help our customers deliver better web-based applications that can be accessed through any device and are pleasure to use.
This is a Organisation

13 members

Comments and Discussions

 
-- There are no messages in this forum --