动画不透明度在jquery中无法正常工作

时间:2014-09-10 10:29:06

标签: javascript jquery html css

当我向下滚动时,我试图更改元素的Opacity。当我滚动回到顶部时,将不透明度更改回正常状态。但是我在这方面遇到了问题。

#menu
{
    opacity:0.6
}

$(window).scroll(function() {
    if ($(this).scrollTop() > 100) {
        $( "#menu" ).fadeTo("fast", 1);
    } else {
        $( "#menu" ).fadeTo("fast", 0.6);
    }
});

上面的代码不起作用,或者在某些情况下它会稍微运行并再次停止!我真的很困惑,因为我尝试使用下面的代码来简单地淡化它,它可以毫无障碍地工作。

$(window).scroll(function() {
    if ($(this).scrollTop() > 100) {
        $( "#menu" ).fadeOut();
    } else {
        $( "#menu" ).fadeIn();
    }
});

3 个答案:

答案 0 :(得分:1)

我会这样做:

$(window).scroll(function ()
    {
        if (window.pageYOffset > 100) 
        {
            $('#menu').addClass('no-opacity');
        } 
        else
        {
            $('#menu').removeClass('no-opacity');
        }
    });

在css中:

.no-opacity { opacity:0; }

再次在css中:逐步改变:

#menu { transition: all 0.5s linear 0s; }

答案 1 :(得分:1)

首先,我建议在.stop()方法之前使用fadeTo,因为您在每个scroll事件上执行它!

之后,你的两个代码块不一样,在第一个代码块中,如果滚动大于100,则表示元素(不透明度为1),第二个代码反之亦然,请尝试:

$(window).scroll(function() {
    if ($(this).scrollTop() > 100) {
        $( "#menu" ).stop().fadeTo("fast", 0.6);
    } else {
        $( "#menu" ).stop().fadeTo("fast", 1);
    }
});

jsFiddle Demo

答案 2 :(得分:1)

为了缩短它,你可以这样做:

JS

var _st;
$(window).scroll(function ()
{
    _st = $(this).scrollTop();
    $('#menu').css({opacity:(_st > 100) ? 0 : 1 });
})

CSS

#menu { transition: opacity 0.5s linear 0s; }