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

Extend filagroup Ipod Style Menu

Rate me:
Please Sign up or sign in to vote.
4.78/5 (2 votes)
27 Nov 2011GPL3 16.1K   173   9   3
Extend for first level stable

Introduction

The jQuery iPod style flyout menus of filamentgroup is a wonderful menu. You click it, it appears. The original site is:

Background

I want to use it as a main menu of my site. The first level of the menu should be always visible, and the click button is no longer needed. I make some changes to the JS file.

Using the Code

The change to the original code is (Bold is changed or new added code):

line 65~90

JavaScript
var options = jQuery.extend({
    content: null,
    width: 180,     // width of menu container, must be set or passed in to 
            // calculate widths of child menus
    maxHeight: 180,     // max height of menu (if a drilldown: height does not 
            // include breadcrumb)
    positionOpts: {
        posX: 'left', 
        posY: 'bottom',
        offsetX: 0,
        offsetY: 0,
        directionH: 'right',
        directionV: 'down', 
        detectH: true, // do horizontal collision detection  
        detectV: true, // do vertical collision detection
        linkToFront: false
    },
    showSpeed: 200, // show/hide speed in milliseconds
    topLevelStable: false,
 
    callerOnState: 'ui-state-active',     // class to change the appearance of 
                    // the link/button when the menu is showing
    loadingState: 'ui-state-loading',     // class added to the link/button while the 
                    // menu is created

line 105~115

JavaScript
if (options.flyOutOnState) { container.find('li a').removeClass(options.flyOutOnState); };
if (options.callerOnState) {     caller.removeClass(options.callerOnState); };        
if (container.is('.fg-menu-ipod')) { menu.resetDrilldownMenu(); };
if (container.is('.fg-menu-flyout')) { menu.resetFlyoutMenu(); };    
if (!(options.topLevelStable)) container.parent().hide();    
menu.menuOpen = false;
$(document).unbind('click', killAllMenus);
$(document).unbind('keydown');

line 15~60

JavaScript
$.fn.menu = function(options) { 
    var caller = this; 
    var options = options; 
    var m = new Menu(caller, options); 
    allUIMenus.push(m); 
    var gop = jQuery.extend({ 
        topLevelStable: false
     },options);

    $(this)
         .mousedown(function() {
             if (!(gop.topLevelStable)) {
                 if (!m.menuOpen) { m.showLoading(); };
             }
         })
         .click(function() {
             if (!(gop.topLevelStable)) {
                 if (m.menuOpen == false) { m.showMenu(); }
                 else { m.kill(); };
             }
             return false;
         });
 
    $(this)
         .ready(function() {
             if (gop.topLevelStable) {
                 if (!m.menuOpen) { m.showLoading(); };
             }
         })
         .ready(function() {
             if (gop.topLevelStable) {
                if (m.menuOpen == false) { m.showMenu(); }
                 else { m.kill(); };
                 return false;
             }
         });
     $(window).resize(function() {
         $(".positionHelper").css("left", $("#menuhock").offset().left);
     });
 };

Then set the place(position) hold element to zero height (style:height: 0) and initialize the menu with parameter topLevelStable: true.

It works. I use it in my own site (http://ww.songlife.net, it has still been upgrading).

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Web Developer
China China
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 3 Pin
Member 1036022425-Oct-13 5:30
Member 1036022425-Oct-13 5:30 
GeneralMy vote of 5 Pin
Kanasz Robert29-Nov-11 22:41
professionalKanasz Robert29-Nov-11 22:41 
Good tip.
GeneralRe: My vote of 5 Pin
phome1-Dec-11 2:45
phome1-Dec-11 2:45 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.