DHTML Lab: Cross-Browser Hierarchical Menus; Compatibility
Cross-Browser Hierarchical Menus
| |||
Check out the menus a final time. |
Final FunctionsIf the menu item is a link, and the user clicks it, the menu's linkIt() method is called, which has been assigned this function: function linkIt() { location.href = this.linkText; } For Explorer 4 users, as you will recall, we provide the added courtesy of not allowing the irritating selection of content, if the user inadvertently drags the mouse over an item. The menu's onselectstart event handler calls cancelSelect() which simply returns false, cancelling the default action, that is, the highlighting. We also used this handler in our Explorer drag-and-drop column. function cancelSelect(){return false} We've been positioning the menus using the built-in moveTo() method of Navigator and a custom moveTo() method for Explorer. The latter is defined by the moveTo() function. Only Explorer sees it, since the method assignment was set earlier in a browser-specific statement. function moveTo(xPos,yPos) { this.style.pixelLeft = xPos; this.style.pixelTop = yPos; } Cross-Browser and Backward CompatibilityExplorer 4 for the Macintosh NS4 = (document.layers) ? 1 : 0; IE4 = (document.all) ? 1 : 0; ver4 = (NS4 || IE4) ? 1 : 0; isMac = (navigator.appVersion.indexOf("Mac") != -1) ? 1 : 0; isMenu = (NS4 || (IE4 && !isMac)) ? 1 : 0; Here, we've defined a new variable, isMenu, which will only be true if the user is using Navigator 4 or Explorer 4 in a non-Macintosh version. We only want to exclude IE4Mac from the menu routines, not other DHTML that it may support. Our usual ver4 variable may still be useful, therefore, for non-menu DHTML. Common Script <SCRIPT LANGUAGE="JavaScript"> <!-- NS4 = (document.layers) ? 1 : 0; IE4 = (document.all) ? 1 : 0; ver4 = (NS4 || IE4) ? 1 : 0; isMac = (navigator.appVersion.indexOf("Mac") != -1) ? 1 : 0; isMenu = (NS4 || (IE4 && !isMac)) ? 1 : 0; function popUp(){return}; function popDown(){return}; if (!ver4) event = null; //--> </SCRIPT> Recall that the two functions called by the link event handlers in our page our first defined here for non-DHTML browsers. DHTML browsers will use the versions defined in our external script which will be executed later. Since the event keyword is passed to these functions, we give it a value here, again for non-DHTML browsers. Parameter Declaration <SCRIPT LANGUAGE="JavaScript1.2"> <!-- if (isMenu) { menuWidth = 120; childOverlap = 50; childOffset = 3; . . . borSty = "outset"; imgSrc = "triangle.gif"; imgSiz = 10; } //--> </SCRIPT> Conditional External File Definition <SCRIPT LANGUAGE="JavaScript1.2"> <!-- if (isMenu) { document.write("<SCRIPT(keep with next line) LANGUAGE='JavaScript1.2' SRC='hierArrays.js'><\/SCRIPT>"); document.write("<SCRIPT(keep with next line) LANGUAGE='JavaScript1.2' SRC='hierMenus.js'><\/SCRIPT>"); } //--> </SCRIPT> Possible EnhancementsFor the more adventurous, there are many enhancements possible for our menu routines. A fourth menu level is one, obviously. Different features for menu/item styling is another. For example, a menu might have a border, while the items do not. This is a little more difficult in Navigator than Explorer, but it can be done. See the Jigsaw Puzzle columns, where we create such a border. There are some desired features that are impossible to achieve. Having the menus overlap frame borders is one. However, an IFRAME version of the menus would be a worthwhile project for Explorer developers. BugsAs we know, Navigator loses the DHTML layout when the browser window is resized. If your windows are resizable, the onresize event needs to be captured and directed to reload the page. But then you all know that by now. We have used onfocus for link items in Navigator, since the click event cannot be properly captured. When the user navigates to a new page, after a menu item selection, the new page may continue to be "in focus." That is, parts of it may be highlighted as the user moves the mouse. A simple click removes the focus. The Full CodeAll the code discussed in this column is repeated, in its entirety, on the next three pages. |
Produced by Peter Belesis and
All Rights Reserved. Legal Notices.Created: Feb. 27, 1998
Revised: Feb. 27, 1998
URL: https://www.webreference.com/dhtml/column15/menu2Final.html