代码之家  ›  专栏  ›  技术社区  ›  ian

jquery动画问题

  •  0
  • ian  · 技术社区  · 16 年前

    我正在修改此示例: 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 单个项目:

    JS Bin链接: 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 回复  |  直到 16 年前
        1
  •  0
  •   Community Mohan Dere    6 年前

    将#m01改为相对定位。

    默认情况下,所有元素都具有 position 设置为 static left 只会影响定位的元素 absolute relative fixed ,动画将不可见。

    #menu ,因为 已定位 .

    就给吧 #m01 position: relative; 它会起作用的。