JSFiddle - React, Tailwind, and code Playground

HTML

<div id="body">
    <div id="sectionA" class="div">First section</div>
    <div id="sectionB" class="div">Second section</div>
    <div id="sectionC" class="div">Third section
        <div class="box"></div>
        <div class="box"></div>
        <div class="box"></div>
    </div>
    <div id="footer" class="div cf"><div>Footer</div></div>
</div>

CSS

* {
    margin: 0;
    padding: 0
}
body {
    background-color: #800000;
}

/* clear fix */
cf:after {
    visibility:hidden;
    display:block;
    content:"";
    clear:both;
    height:0
}
* html .cf {
    zoom:1
}
/* IE6 */
 *:first-child+html .cf {
    zoom:1
}
/* IE7 */

.div {
    height: 500px;
    width: 100%;
    display: block;
    position: relative;
}
#sectionA {
    background-color: #ABFF8F;
}
#sectionB {
    background-color: #FFDF80;
}
#sectionC {
    background-color: #A8E9FF;
    height: 100px !important;
    z-index: 1;
}
#footer {
    background-color: #666;
    position: relative;
    color: #fff;
    font-weight: bold;
    font-size: 2em;
    z-index: 10;
}
#footer > div {
    position: absolute;
    top: 0;
    left: 0;
}
.box {
    width:50px;
    margin: 0 20px 20px 0;
    height: 50px;
    display: block;
    background-color: #f2f2f2;
    float: left;
}

JavaScript

var $window = jQuery(window),
    $footer = jQuery("#footer"),
    $viewport = window.innerHeight,
    $startEffect = $footer.offset().top;
    $prev = $footer.prev(),
    $useStartEffect = $startEffect < $viewport;
    

function footerParallax() {
    var $scrollPos = $window.scrollTop() - $startEffect,
        $ratio = 0.6;

    var prevOffset = $prev.offset().top + $prev.height() - $window.scrollTop();
    var marginTop = 0;
    
    if(prevOffset < $viewport && prevOffset < $startEffect) {
        if($useStartEffect) {
            marginTop = (prevOffset - $startEffect)*$ratio;
        } else {
            marginTop = (prevOffset - $viewport)*$ratio;       
        }
    }

    $footer.css({
        "margin-top": marginTop + 'px'
    });
}

$window.scroll(function () {
    footerParallax();
});

footerParallax();