Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 滚动重新启动函数导致jQuery动画问题_Javascript_Jquery_Scroll_Jquery Animate - Fatal编程技术网

Javascript 滚动重新启动函数导致jQuery动画问题

Javascript 滚动重新启动函数导致jQuery动画问题,javascript,jquery,scroll,jquery-animate,Javascript,Jquery,Scroll,Jquery Animate,当用户向下滚动时,导航条滑入,我有一个问题。我的代码是有效的——但是如果你一直滚动(上下滚动,或者很快地下滚动),条的移动速度会很慢,而不是应该的速度。我认为这是因为即使在动画进行到一半时,函数也会自动重新启动,因此它必须移动一半的距离,同时保持相同的时间,就好像它必须移动整个距离一样。我发现了几种可能性,但它们都清除了我无法执行的动画队列,就好像我在向下动画完成之前滚动到顶部一样,导航栏仍将可见,即使它不应该可见。因此,基本上我希望导航条能够平滑地滑入,即使我一直向下滚动,但是需要有某种东西阻

当用户向下滚动时,导航条滑入,我有一个问题。我的代码是有效的——但是如果你一直滚动(上下滚动,或者很快地下滚动),条的移动速度会很慢,而不是应该的速度。我认为这是因为即使在动画进行到一半时,函数也会自动重新启动,因此它必须移动一半的距离,同时保持相同的时间,就好像它必须移动整个距离一样。我发现了几种可能性,但它们都清除了我无法执行的动画队列,就好像我在向下动画完成之前滚动到顶部一样,导航栏仍将可见,即使它不应该可见。因此,基本上我希望导航条能够平滑地滑入,即使我一直向下滚动,但是需要有某种东西阻止我在导航条仍然可见的情况下滚动到顶部。谢谢

JSFiddle:

我的代码:

jQuery(document).ready(function() {
    var offset = 220;
    var duration = 500;

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('#nav').stop(true).animate({'top': '0'}, duration, 'linear');
        } else {
            jQuery('#nav').stop(true).animate({'top': '-72px'}, duration, 'linear');
        }
    });
});

由于动画只需要运行一次,我创建了一个名为position的变量,该变量限制“向下动画”多次运行,直到调用“向上动画”,反之亦然。谢谢你的主意

jQuery(document).ready(function() {
    var offset = 220;
    var duration = 300;
    var position = 'up';

    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset && position === 'up') {
            jQuery('#nav').stop(true).animate({'top': '0'}, duration, 'linear');
            position = 'down';
        } else if (jQuery(this).scrollTop() < offset && position === 'down'){
            jQuery('#nav').stop(true).animate({'top': '-72px'}, duration, 'linear');
            position = 'up';
        } else {
            return;
        }
    });
});
jQuery(文档).ready(函数(){
var偏移=220;
var持续时间=300;
var位置='向上';
jQuery(窗口).滚动(函数(){
if(jQuery(this).scrollTop()>偏移量和位置=='up'){
jQuery(“#nav”).stop(true).animate({'top':'0'},duration,'linear');
位置=‘向下’;
}else if(jQuery(this).scrollTop()
每当滚动到达动画点时,您需要设置一些标志,并且只做一次动画。@adeneo非常感谢我得到了它now@VotetoClose对我来说,这消除了平滑动画。谢谢你的帮助,但我现在已经修好了