JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.min.js"></script>
<div class="block">
	<h1>Hello world!</h1>
</div>
<div class="block">
	<h1>Hello world!</h1>
</div>
<div class="block">
	<h1>Hello world!</h1>
</div>
<div class="block">
	<h1>Hello world!</h1>
</div>
<div class="viewer-wrap">
  <section class="scene section" id="sticky">
    <div class="viewer"></div>
  </section>
  <!-- Сюда добавляем наш блок -->
  <div class="block super-crutch">
    <h1>Hello world!</h1>
  </div>
</div>
<div class="block"> <!-- а вот этот блок перемещается во viewer-wrap -->
	<h1>Hello world!</h1>
</div>
<div class="block">
	<h1>Hello world!</h1>
</div>

CSS

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  width: 100%;
}
.block {
  width: 100%;
  height: 500px;
  background: tomato;
}

.super-crutch {
  position: absolute; /* Базовое значение*/
  top: 0; /* выравнием поверху */
  left: 0;
  margin-top: 350px; /* т.к. высота вьювера известна, делаем отступ от него */
}
.header {
  color: white;
}

.section {
  background: #FFFFFF;
  color: black;
}

.scene {
  height: 350px;
  width: 100%;
  background: #EAEAEA;
}
h1 {
  font-size: 40px;
  color: #fff;
  margin: 0;
}
.center {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  height: 100%;
}
.viewer-wrap {
  position: relative; /* Выставляем как родительский блок для блока-костыля */
}
.viewer {
  height: 100%;
  margin-left: auto;
  margin-right: auto;
  width: 100%;
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-01.png);
  background-repeat: no-repeat;
  background-position: 50% 0;
  background-size: 100% 350px;
}

.viewer.frame1 {
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-01.png);
}

.viewer.frame2 {
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-01.png);
}

.viewer.frame3 {
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-02.png);
}

.viewer.frame4 {
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-02.png);
}

.viewer.frame5 {
  background-image: url(http://mav.klendev.ru/5278/static/km/ComplexFoodtracks/css/base/Baw-02.png);
}

.viewer.frame6 {
  background-image:...

JavaScript

var viewer       = document.querySelector('.viewer'),
    frame_count  = 9,
    offset_value = 100;

// init controller
var controller = new ScrollMagic.Controller({
  globalSceneOptions: {
    triggerHook: 0,
    reverse: true
  }
});

// build pinned scene
new ScrollMagic.Scene({
  triggerElement: '#sticky',
  duration: frame_count * offset_value,
  reverse: true
})
.setPin('#sticky')
//.addIndicators()
.addTo(controller);

// build step frame scene
for (var i = 1, l = frame_count; i <= l; i++) {
  new ScrollMagic.Scene({
      triggerElement: '#sticky',
      offset: i * offset_value
    })
    .setClassToggle(viewer, 'frame' + i)
    //.addIndicators()
    .addTo(controller);
}
// Берем объект вьювера под контроль
var isActiveViewer = document.querySelector('#sticky');
// Наше решение проблемы
var crutch = document.querySelector('.super-crutch');

window.onscroll = function() {
	// Если наш вьювер активен
  if(isActiveViewer.style.position == 'fixed') {
 		// Выставляешь значение для нашего блока тоже fixed, это создаст эффект неразоединения
 		crutch.style.position = 'fixed'
  } else {
   // Когда вьювер неактивен, наш блок тоже ездит без проблем
 	 	crutch.style.position = 'absolute'
  }
}