пятница, 24 сентября 2010 г.

Меню на jQuery

Возникла необходимость сделать красивое, но простое меню.Для реализации была выбрана либа jQuery. Весь процесс поиска правильного решения описывать не буду, приведу лишь конечный вариант кода:

Итак, HTML:




<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Горизонтальное меню</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251" />
<link rel="stylesheet" type="text/css" href="css/slidemenu.css" />





</head>




</body> </html>   
JS:
var arrowimages={down:['downarrowclass', 'img/down.gif', 23], right:['rightarrowclass', 'img/right.gif']}

var jqueryslidemenu={

animateduration: {over: 150, out: 100},

buildmenu:function(menuid, arrowsvar, type){
 jQuery(document).ready(function($){
  var $mainmenu=$("#"+menuid+">ul")
  var $headers=$mainmenu.find("ul").parent()
  $headers.each(function(i){
   var $curobj=$(this)
   var $subul=$(this).find('ul:eq(0)')
   this._dimensions={w:this.offsetWidth, h:this.offsetHeight, subulw:$subul.outerWidth(), subulh:$subul.outerHeight()}
   this.istopheader=$curobj.parents("ul").length==1? true : false
   $subul.css({left:this.istopheader? this._dimensions.w+"px" : 0})

            
   if (type==2)
   {
    $curobj.children("a:eq(0)")
                /*
                .css(this.istopheader? {paddingRight: "10"} : {}).append(
     ''
    )
                */
   }
   else
   {

    $curobj.children("a:eq(0)")
                /*
                .css(this.istopheader? {paddingRight: arrowsvar.down[2]} : {}).append(
    ''
   )*/


   }


   $curobj.hover(
    function(e){
     var $lala=$(this)
     var $targetul=$(this).children("ul:eq(0)")
     this._offsets={left:$(this).offset().left, top:$(this).offset().top}

     $lala.css({})

     if (type==2)
     {
     var menuleft=this._dimensions.w
     $targetul.css({top:"0px"})
     }
     else
     {
     var menuleft=this.istopheader? 0 : this._dimensions.w
     }

     menuleft=(this._offsets.left+menuleft+this._dimensions.subulw>$(window).width())? (this.istopheader? -this._dimensions.subulw+this._dimensions.w : -this._dimensions.w) : menuleft
     $targetul.css({left:menuleft+"px",width:this._dimensions.subulw+'px'}).slideDown(jqueryslidemenu.animateduration.over)

    },
    function(e){

     var $targetul=$(this).children("ul:eq(0)")
     $targetul.slideUp(jqueryslidemenu.animateduration.out)
    }
   )
  })
  $mainmenu.find("ul").css({display:'none', visibility:'visible'})
 })
}
}
   

CSS:
.jqueryslidemenu{
font: bold 10px Verdana;
/*background: #414141;*/
width: 940px;
margin:0 auto;
float: left;
margin-left: 200px;
}

.jqueryslidemenu ul{
margin: 0;
padding: 0;
list-style-type: none;
}

/*Top level list items*/
.jqueryslidemenu ul li{
position: relative;
display: inline;
float: left;
}

/*Top level menu link items style*/
.jqueryslidemenu ul li a{
display: block;
background: #d8efe2; /*background of tabs (default state)*/
color: #000;
padding: 4px 4px;
border-right: 1px solid #778;
border-bottom: 1px solid #778;
text-decoration: none;
}

* html .jqueryslidemenu ul li a{ /*IE6 hack to get sub menu links to behave correctly*/
display: inline-block;
}

.jqueryslidemenu ul li a:link, .jqueryslidemenu ul li a:visited{
color: black;
}

.jqueryslidemenu ul li a:hover{
background: #d8efe2; /*tab link background during hover state*/
color: #0f4f2b;
}

/*1st sub level menu*/
.jqueryslidemenu ul li ul{
position: absolute;
left: 0;
display: block;
visibility: hidden;
}

/*Sub level menu list items (undo style from Top level List Items)*/
.jqueryslidemenu ul li ul li{
display: list-item;
float: none;
}

/*All subsequent sub menu levels vertical offset after 1st level sub menu */
.jqueryslidemenu ul li ul li ul{
top: 0;
}

/* Sub level menu links style */
.jqueryslidemenu ul li ul li a{
font: normal 10px Verdana;
width: 160px; /*width of sub menus*/
padding: 5px;
margin: 0;
border-top-width: 0;
border-bottom: 1px solid gray;
border-left: 1px solid gray;
}

.jqueryslidemenuz ul li ul li a:hover{ /*sub menus hover style*/
background: #eff9ff;
color: black;
}

/* ######### CSS classes applied to down and right arrow images  ######### */

.downarrowclass{
position: absolute;
top: 12px;
right: 7px;
}

.rightarrowclass{
position: absolute;
top: 6px;
right: 5px;
}
В итоге получим довольно симпатичную менюшку, пример можно посмотреть здесь



0 коммент.:

Отправить комментарий