jQuery实现侧边导航点击隐藏动画设计

现在有这样一个需求,对于左侧的导航,当我点击导航的最上方时,原本显示的导航隐藏,再次点击后,隐藏的导航显示,以此反复,同时,在导航隐藏的状态下悬浮在导航的内容上时,导航也显示,当前状态下鼠标不悬浮在导航上时,导航恢复隐藏,其实是一个很简单的效果,但只有这样清楚的表达出来才能更好的实现,在这里用jQuery实现,给代码中出现的元素做简单说明,.sidebar-header指的是导航头,#left-sidebar指的是整个左导航,

var clickAnimating = false;//^O^ -- 增加click导航缩进动画的标记位
var isOpen = false;         //判断导航当前是显示或者隐藏的标志位
$('#left-sidebar ul#sidenav').wrap('<div id="slidebar_plugin" style="height:85%;overflow:hidden;"></div>');
        $('.sidebar-header').on('click',function(e){
            //****************^O^ 标记位处理 start*****************
            if(clickAnimating){
                return;
            }
            clickAnimating = true;
            //****************^O^ 标记位处理 end*****************
            e.preventDefault();
            e.stopPropagation();

            var $datarole = $('#left-sidebar').attr('data-role');
            if($datarole == 'show'){
                $('#left-sidebar').animate({'left':'-2px'},function(){
                    clickAnimating = false;  //^O^ -- 修改标记位
                });//显示
                $("#right-content").animate({width:'86.1%'},function(){
                    clickAnimating = false;  //^O^ -- 修改标记位
                });
                $('.sidebar-header i').removeClass('glyphicon-circle-arrow-right').addClass('glyphicon-circle-arrow-left');
                $('#minu-sidebar i').css({'float':'left'});
                $('#sidenav i').fadeIn();
                $('#left-sidebar').removeAttr('data-role');
                $('#left-sidebar').attr('data-role','hide');
                $("#minu-sidebar").attr('role','maxu-nav');
                isOpen = true;
            }else{
                //^O^ -- 修改left值
                $('#left-sidebar').animate({'left':-2 - parseFloat($('#left-sidebar').css('width')) + 40},function(){
                    clickAnimating = false;  //^O^ -- 修改标记位
                });//隐藏
                $("#right-content").animate({width:'97.4%'},function(){
                    clickAnimating = false;  //^O^ -- 修改标记位
                });
                $('.sidebar-header i').removeClass('glyphicon-circle-arrow-left').addClass('glyphicon-circle-arrow-right');
                $('#minu-sidebar i').css({'float':'right'});
                $('#sidenav i').fadeOut();
                $('#left-sidebar').removeAttr('data-role');
                $('#left-sidebar').attr('data-role','show');
                $("#minu-sidebar").attr('role','minu-nav');
                isOpen = false;
            }
        });



        $('#slidebar_plugin').hover(
            function(e){
                //****************^O^ 标记位处理 start*****************
                if(clickAnimating){
                    return;
                }
                //****************^O^ 标记位处理 end*****************
                e.preventDefault();
                e.stopPropagation();

                var $datarole = $('#left-sidebar').attr('data-role');
                var icon = $("#minu-sidebar").attr('role');
                //^O^ -- 添加stop
                $('#left-sidebar').stop();
                $('#sidenav i').stop();
                $('#minu-sidebar i').stop();
                $("#right-content").stop();
                if($datarole == 'show'){
                    $('#left-sidebar').animate({'left':'-2px'});//显示
                    $('.sidebar-header i').removeClass('glyphicon-circle-arrow-right').addClass('glyphicon-circle-arrow-left');
                    $('#minu-sidebar i').css({'float':'left'});
                    $('#sidenav i').show();
                    $('#left-sidebar').removeAttr('data-role');
                    $('#left-sidebar').attr('data-role','hide');
                    $("#minu-sidebar").attr('role','maxu-nav');
                }
            }//end of function
            ,
            function(e){
                //****************^O^ 标记位处理 start*****************
                if(clickAnimating){
                    return;
                }
                //****************^O^ 标记位处理 end*****************
                e.preventDefault();
                e.stopPropagation();

                var $datarole = $('#left-sidebar').attr('data-role');
                var icon = $("#minu-sidebar").attr('role');
                //^O^ -- 添加stop
                $('#left-sidebar').stop();
                $('#sidenav i').stop();
                $('#minu-sidebar i').stop();
                $("#right-content").stop();
                if($datarole == 'hide' && (isOpen == false)){
                    //^O^ -- 修改left值
                    $('#left-sidebar').animate({'left':-2 - parseFloat($('#left-sidebar').css('width')) + 40});//隐藏
                    $('.sidebar-header i').removeClass('glyphicon-circle-arrow-left').addClass('glyphicon-circle-arrow-right');
                    $('#minu-sidebar i').css({'float':'right'});
                    $('#sidenav i').hide();
                    $('#left-sidebar').removeAttr('data-role');
                    $('#left-sidebar').attr('data-role','show');
                    $("#minu-sidebar").attr('role','minu-nav');
                }
            }//end of function
        );//end of hover

还需注意浏览器缩放时的效果

$(window).resize(function(){
    //****************   导航缩进时控制左导航left-sidenav与右边内容right-content的间距  *****************
    if(parseFloat($('#left-sidebar').css('left')) < -2 ){      
        $('#left-sidenav').css({'width':'14%'});
        $('#left-sidebar').css({'left': -2 - parseFloat($('#left-sidebar').css('width'))+40});  
        $('#right-content').css({'width':'97.4%'});    
    }else if(parseFloat($('#left-sidebar').css('left')) == -2 ){
        $('#left-sidenav').css({'width':'14%'});
        $('#right-content').css({'width':'86.1%'});
    }
    $('#right-content').css({'left':parseFloat($('#left-sidenav').css('left')) + parseFloat($('#left-sidenav').css('width')) + 3});

});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值