Fade In on Scroll Down, Fade Out on Scroll Up - based on element position in window

前端 未结 4 1042
抹茶落季
抹茶落季 2020-11-28 04:13

I\'m trying to get a series of elements to fade in on scroll down when they are fully visible in the window. If I keep scrolling down, I do not want them to fade out, but if

4条回答
  •  星月不相逢
    2020-11-28 04:45

    I tweaked your code a bit and made it more robust. In terms of progressive enhancement it's probaly better to have all the fade-in-out logic in JavaScript. In the example of myfunksyde any user without JavaScript sees nothing because of the opacity: 0;.

        $(window).on("load",function() {
        function fade() {
            var animation_height = $(window).innerHeight() * 0.25;
            var ratio = Math.round( (1 / animation_height) * 10000 ) / 10000;
    
            $('.fade').each(function() {
    
                var objectTop = $(this).offset().top;
                var windowBottom = $(window).scrollTop() + $(window).innerHeight();
    
                if ( objectTop < windowBottom ) {
                    if ( objectTop < windowBottom - animation_height ) {
                        $(this).html( 'fully visible' );
                        $(this).css( {
                            transition: 'opacity 0.1s linear',
                            opacity: 1
                        } );
    
                    } else {
                        $(this).html( 'fading in/out' );
                        $(this).css( {
                            transition: 'opacity 0.25s linear',
                            opacity: (windowBottom - objectTop) * ratio
                        } );
                    }
                } else {
                    $(this).html( 'not visible' );
                    $(this).css( 'opacity', 0 );
                }
            });
        }
        $('.fade').css( 'opacity', 0 );
        fade();
        $(window).scroll(function() {fade();});
    });
    

    See it here: http://jsfiddle.net/78xjLnu1/16/

    Cheers, Martin

提交回复
热议问题