HorizontalAccordion1

For WAC

by Koubenec

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Horizontal Slide Menu</title>
<link rel="stylesheet" type="text/css" href="slidemenu.css" />
<script type="text/javascript" src="slidemenu.js"></script>
</head>
<body onload="slideMenu.build('sm',200,10,10,1)">
<ul id="sm" class="sm">
    <li><div class="button">Button</div></li>
    <li><div class="button">Button</div></li>
    <li><div class="button">Button</div></li>
    <li><div class="button">Button</div></li>
</ul>
</body>
</html>

CSS

* {margin:0; padding:0}
.sm {list-style:none; width:459px; height:100px; display:block; overflow:hidden}
.sm li {float:left; display:inline; overflow:hidden}
.button {
    background-color: red;
}

JavaScript

var slideMenu=function(){
    var sp,st,t,m,sa,l,w,gw,ot;
    return{
        build:function(sm,sw,mt,s,sl,h){
            sp=s; st=sw; t=mt;
            m=document.getElementById(sm);
            sa=m.getElementsByTagName('li');
            l=sa.length; w=m.offsetWidth; gw=w/l;
            ot=Math.floor((w-st)/(l-1)); var i=0;
            for(i;i<l;i++){s=sa[i]; s.style.width=gw+'px'; this.timer(s)}
            if(sl!=null){m.timer=setInterval(function(){slideMenu.slide(sa[sl-1])},t)}
        },
        timer:function(s){
            s.onmouseover=function(){clearInterval(m.htimer);clearInterval(m.timer);m.timer=setInterval(function(){slideMenu.slide(s)},t)}
            s.onmouseout=function(){clearInterval(m.timer);clearInterval(m.htimer);m.htimer=setInterval(function(){slideMenu.slide(s,true)},t)}
        },
        slide:function(s,c){
            var cw=parseInt(s.style.width);
            if((cw<st && !c) || (cw>gw && c)){
                var owt=0; var i=0;
                for(i;i<l;i++){
                    if(sa[i]!=s){
                        var o,ow; var oi=0; o=sa[i]; ow=parseInt(o.style.width);
                        if(ow<gw && c){oi=Math.floor((gw-ow)/sp); oi=(oi>0)?oi:1; o.style.width=(ow+oi)+'px';
                        }else if(ow>ot && !c){oi=Math.floor((ow-ot)/sp); oi=(oi>0)?oi:1; o.style.width=(ow-oi)+'px'}
                        if(c){owt=owt+(ow+oi)}else{owt=owt+(ow-oi)}}}
                s.style.width=(w-owt)+'px';
            }else{clearInterval(m.timer);clearInterval(m.htimer)}
        }
    };
}();