jquery动画问题

时间:2009-11-09 07:55:34

标签: jquery

我正在修改此示例:http://www.queness.com/post/256/horizontal-scroll-menu-with-jquery-tutorial

问题在于,当我尝试水平设置特定<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 Bin Link: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> 

1 个答案:

答案 0 :(得分:0)

将#m01更改为相对定位。

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

当您在#menu上运行动画时,它会起作用,因为#menu位于relative

只需提供#m01 position: relative;即可。