|
||||||||
|
|||||||
|
|
Last updated: 16 Jan 2006
Multilinks
Normal web browser behaviour is to switch to a new page when you click a hyperlink. Sometimes however you want
a single hyperlink to lead to several pages and present a dynamic menu when clicked. This is usually done through
an intermediary page.
The javascript sample on this page will provide such dynamic menus by creating an absolutely-positioned DIV tag on the fly, which will contain the list of links. For another such concept implementation check out the Absolute Popup Box sample, which achieves similar effect but with the help of external pages in IFRAME tag. Script demonstration
Script source code
To use the script perform the following steps:
<script type="text/javascript"><!--
/* Script by: www.jtricks.com
* Version: 20060116
* Latest version:
* www.jtricks.com/javascript/navigation/multilinks.html
*/
// Moves the div object to be directly beneath an object.
function move_box(an, box)
{
var cleft = 0;
var ctop = 0;
var obj = an;
while (obj.offsetParent)
{
cleft += obj.offsetLeft;
ctop += obj.offsetTop;
obj = obj.offsetParent;
}
box.style.left = cleft + 'px';
ctop += an.offsetHeight + 8;
// Handle Internet Explorer body margins,
// which affect normal document, but not
// absolute-positioned stuff.
if (document.body.currentStyle &&
document.body.currentStyle['marginTop'])
{
ctop += parseInt(
document.body.currentStyle['marginTop']);
}
box.style.top = ctop + 'px';
}
// Shows a box if it wasn't shown yet or is hidden
// or hides it if it is curre
function show_hide_multilink(an, width, height, className, links)
{
var href = an.href;
var boxdiv = document.getElementById(href);
if (boxdiv != null)
{
if (boxdiv.style.display=='none')
{
// Show existing box, move it
// if document changed layout
move_box(an, boxdiv);
boxdiv.style.display='block';
}
else
// Hide currently shown box.
boxdiv.style.display='none';
return false;
}
// Create box object through DOM
boxdiv = document.createElement('div');
// Assign id equalling to the document it will show
boxdiv.setAttribute('id', href);
boxdiv.className = className;
boxdiv.style.position = 'absolute';
boxdiv.style.width = width + 'px';
boxdiv.style.height = height + 'px';
var linksarr = links.split(';');
var liobj;
var anchorobj;
for (var i = 0; i < linksarr.length; i = i + 2)
{
liobj = document.createElement('li');
liobj.className = className;
anchorobj = document.createElement('a');
anchorobj.classname=className;
anchorobj.href = linksarr[i];
anchorobj.target = '_top';
anchorobj.appendChild(
document.createTextNode(linksarr[i + 1]));
liobj.appendChild(anchorobj);
boxdiv.appendChild(liobj);
}
document.body.appendChild(boxdiv);
move_box(an, boxdiv);
// The script has successfully shown the box,
// prevent hyperlink navigation.
return false;
}
//--></script>
<a href="multilinks_demo.html" onclick="return show_hide_multilink(this,200,90,'multilink', 'http://a.com;Link1;http://b.com;Link2')"> Page history </a>
Browser compatibility
The javascript snippet above was tested on the following user agents:
*: Graceful degradation means the user agent navigates to web page specified in href parameter of ANCHOR tag instead of showing dynamic menu. This web page can contain small menu on its own. Script Rating
| |||||||||||||||||||||||||||||||
| |||||||