通过使用jquery设置高度动画向下/向上滑动

通过使用jquery设置高度动画向下/向上滑动,jquery,Jquery,我想实现一个效果,这是类似的头上的影响。 标题本身是固定的。向下滚动时,标题会变小。当你滚动 它回到正常高度 我就是这样尝试的: $(document).ready(function() { $(window).scroll(function(e){ var scrollTop = $(window).scrollTop(); if(scrollTop > 50){ $('.main_nav')

我想实现一个效果,这是类似的头上的影响。 标题本身是固定的。向下滚动时,标题会变小。当你滚动 它回到正常高度

我就是这样尝试的:

$(document).ready(function() {           

    $(window).scroll(function(e){
        var scrollTop = $(window).scrollTop();
        if(scrollTop > 50){
                $('.main_nav').animate({
                height:"30px"
            });
        }
    });

});
这会使标题变小。但是我怎样才能使它恢复到正常高度呢?还有其他想法吗

    if(scrollTop > 50){
        $('.main_nav').animate({
            height:"30px"
        });
    }else{
        $('.main_nav').animate({
            height:<OLD HEIGHT>
        });
    }
如果原始高度不是固定的,则可以获取原始高度并在收缩之前使用数据存储它


此外,您可能应该跟踪它是否已经缩小,并且只在适当的时候进行动画制作,而不是每次都调用动画制作。

您是否也希望缩小它的徽标?您可能希望使用jqueryui通过css类设置动画,以更改高度和其他元素,如隐藏搜索块

但如果是James所做的高度,但不需要将其存储在元素上的数据中:

$(document).ready(function() {
    var main_nav = $(".main_nav"),
        oldHeight = main_nav.height(),
        scrollUpTo = 30,
        hideHeight = 50,
        w = window;

    $(window).scroll(function(e){
        var scrollTop = $(w).scrollTop();
        setTimeout(function() {
            if(scrollTop > hideHeight  && main_nav.height() !== scrollUpTo ){
                main_nav.stop(/*clearQueue*/true).animate({ height: scrollUpTo });
            } else if(scrollTop < hideHeight  && main_nav.height() !== oldHeight ) {
                main_nav.stop(/*clearQueue*/true).animate({ height: oldHeight });
            }
      }, 100);
    });

});
如果高度不等于旧高度且scrollTop小于50,则对其设置一次动画

您可能还希望使用超时,以便在滚动时不会一直触发建议的滚动事件超时

但要修复主导航的所有子元素,我猜jquery ui switchClass可能会修复它。

看看这里:

我稍微修改了你的代码。 如果用户快速上下滚动,我将取消动画。 将收割台的位置设置为“固定”

JS

CSS

Html


如果你不想让它排队,你必须像这样:header.stop.animate{height:30px},{queue:false}第一个参数是动画属性
var header = $('#header')

$(window).scroll(function(e){    
    var scrollTop = $(window).scrollTop();
    if(scrollTop > 50 ){
        header.stop().animate({height:"30px", queue: false});
    }
    else{        
        header.stop().animate({height:"50px", queue: false});
    }
});​
#header {
    height:50px;
    width:716px;
    position:fixed;
    left:0px;
    top:0px;
    background:red;
    z-index: 900;
}
<div id="header"></div>
<div id="bodyContent">
    <div style="height:1000px"></div>     
</div>