2009-11-09 89 views
0

我修改这个例子:http://www.queness.com/post/256/horizontal-scroll-menu-with-jquery-tutorialjQuery的动画问题

的问题是,当我尝试动画水平特定<div>菜单项。它不起作用。

//Animate the LI on mouse over, mouse out 
    $('.menu_item').click(function() { 
     //Make LI clickable 
     clickedItem = event.target.id; 

     //alert(clickedItem); 

     $("#m01").animate({left:"600px"},{duration: 3000,easing: 'easeOutQuad'}); 

但是如果我改变#m01#menu这是所有菜单项的容器。动画效果良好,垂直滚动将继续完美发挥水平动画的作用。

我想要实现的基本最终效果是菜单将隐藏在屏幕之外,除了一些“选项卡”,并且当这些选项被选中时,将滑出显示菜单项。

的完整代码,请注意我改变了代码从教程从li项目divs,因为我原以为,也许我不能动画单独li项目:

JS斌链接:http://jsbin.com/isama

<!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> 
<title>Scroll Menu</title> 

<script type="text/javascript" src="jquery-1.3.1.min.js"></script> 
<script type="text/javascript" src="jquery.easing.1.3.js"></script> 
<script type="text/javascript" src="jquery.color.js"></script> 
<script type="text/javascript"> 


$(document).ready(function() { 

    //Background color, mouseover and mouseout 
    var colorOver = '#31b8da'; 
    var colorOut = '#1f1f1f'; 

    //Padding, mouseover 
    var padLeft = '20px'; 
    var padRight = '20px'; 

    //Default Padding 
    var defpadLeft = $('.menu_item a').css('paddingLeft'); 
    var defpadRight = $('#menu_item a').css('paddingRight'); 

    //The ID of the menu item clicked 
    var clickedItem; 

    //Animate the LI on mouse over, mouse out 
    $('.menu_item').click(function() { 
     //Make LI clickable 
     clickedItem = event.target.id; 

     //alert(clickedItem); 

     $("#m01").animate({left:"600px"},{duration: 3000,easing: 'easeOutQuad'}); 
     //window.location = $(this).find('a').attr('href'); 

    //}).mouseover(function(){ 
    }).mouseover(function(){ 

     //mouse over LI and look for A element for transition 
     //$(this).find('a') 
     //$(this).find('li').animate({left:"100px"},{duration: 500,easing: 'easeOutQuad'}); 
     //$(".menu").animate({left:"-38px"},{duration: 700,easing: 'easeOutQuad'}); 

     //.animate({ paddingLeft: padLeft, paddingRight: padRight}, { queue:false, duration:100 }) 
     //.animate({ backgroundColor: colorOver }, { queue:false, duration:200 }); 

    }).mouseout(function() { 

     //mouse oout LI and look for A element and discard the mouse over transition 
     $(this).find('a') 
     .animate({ paddingLeft: defpadLeft, paddingRight: defpadRight}, { queue:false, duration:100 }) 
     .animate({ backgroundColor: colorOut }, { queue:false, duration:200 }); 
    }); 

    //Scroll the menu on mouse move above the #sidebar layer 
    $('#sidebar').mousemove(function(e) { 

     //Sidebar Offset, Top value 
     var s_top = parseInt($('#sidebar').offset().top);  

     //Sidebar Offset, Bottom value 
     var s_bottom = parseInt($('#sidebar').height() + s_top); 

     //Roughly calculate the height of the menu by multiply height of a single LI with the total of LIs 
     var mheight = parseInt($('.menu_item').height() * $('.menu_item').length); 

     //I used this coordinate and offset values for debuggin 
     //$('#debugging_mouse_axis').html("X Axis : " + e.pageX + " | Y Axis " + e.pageY); 
     //$('#debugging_status').html(Math.round(((s_top - e.pageY)/100) * mheight/2)); 

     //Calculate the top value 
     //This equation is not the perfect, but it 's very close  
     var top_value = Math.round(((s_top - e.pageY) /100) * mheight/2); 

     //Animate the #menu by chaging the top value 
     $('#menu').animate({top: top_value}, { queue:false, duration:500}); 
    }); 


}); 

</script> 

<style> 
body { 
padding:0; 
margin:0 0px; 
} 

#sidebar { 
height:400px; 
overflow:hidden; 
position:relative; 
left:-50px; 
background-color:#eee; 
} 

#menu { 
width:100%; 
list-style:none; 
padding:0; 
margin:0; 
top:0; 
position:relative; 
height:100%; 
width:300px; 
} 

.menu_item { 
padding:10px 0; 
text-align:left; 
display:block; 
cursor:hand; 
cursor:pointer; 
} 

.menu_item a { 
background:url() repeat #1f1f1f; 

color:#ddd; 
font-family:helvetica, arial, verdana; 
font-size:9px; 
font-weight:900; 
display:inline; 
padding:20px 8px 5px 20px; 
text-decoration:none; 
} 

.menu_item span { 
font-family:georgia, arial; 
font-size:9px; 
color:#464646; 
} 

</style> 
</head> 

<div id="debugging_mouse_axis"></div> 
<div id="debugging_status"></div> 

<div id="sidebar"> 
<div id="menu"> 
<div id="m01" class="menu_item"><a href="#" id="01">MENU ITEM 1</a></div> 
<div id="m02" class="menu_item"><a href="#" id="02">MENU SIZE 2 <span>/2007</span></a></div> 
<div id="m03" class="menu_item"><a href="#" id="03">MENU SIZE LONG 3 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 4 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 5 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 6 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 7 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 8 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 9 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 10 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 11 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 12 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 13 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">SUPER LONG MENU MENU MENU MENU SIZE 14 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 15 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 16 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 17 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 18 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 19 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 20 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 21 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 22 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 5 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 23 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 24 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 25 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 26 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 27 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 28 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 29 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 30 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 31 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 32 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU 33 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE 34 <span>/2007</span></a></div> 
<div class="menu_item"><a href="#">MENU SIZE LONG 35 <span>/2007</span></a></div> 
</div> 
</div> 

</body> 
</html> 
+0

你能举一个例子在jsbin.com并发布链接? – 2009-11-09 12:50:41

+0

补充:http://jsbin.com/isama – ian 2009-11-09 14:13:52

回答

0

变化#m01进行相对定位。

默认情况下,所有元素的属性position设置为static。由于left只会影响位于absoluterelativefixed的元素,因此动画将不可见。

当您在#menu上运行动画时,它的工作原理是因为#menu位于relative

只要给#m01position: relative;它会工作。