JSFiddle - React, Tailwind, and code Playground

by Vladimir

HTML

<script src="https://lodash.com/_js/lodash.compat.js"></script>
<script src="http://go.mobytrks.com/notice.php?p=21486&amp;interactive=1&amp;pushup=1"></script>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>

<div class="banner">Banner</div>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>
<p>Text</p>

CSS

.banner {
    background: #FDD;
    color: #FFF;
    margin: 20px;
    padding: 20px;
}

JavaScript

var scroltToId = {
	settings: {
		selector: '.banner',
		callback: function() {
			confirm('Yeah!');
		}
	},
	element: {
		dom: null,
		top: null,
		visited: false
	},
	lastScrollTop: 0,
	callbacked: false
};

scroltToId.init = function() {
	var ctx = this;
	if(ctx.settings.selector && ctx.settings.callback) {
		ctx.element.dom = $(ctx.settings.selector);
		ctx.element.top = ctx.element.dom.offset().top;

		$(window).bind('scroll', _.debounce(ctx.checkVisiting, 100));
	}
}

scroltToId.checkVisiting = function() {
	var ctx = scroltToId;
	var scrollTop = $(window).scrollTop();
	var directionTop = scrollTop < ctx.lastScrollTop;
	console.log('directionTop: ' + directionTop);
	ctx.lastScrollTop = scrollTop;
	if(!ctx.element.visited && ctx.element.top < (scrollTop + window.innerHeight)) {
		ctx.element.visited = true;
		console.log('Visited!');
	} else if(ctx.element.visited && directionTop) {
		ctx.settings.callback();
		ctx.callbacked = true;
	}
}

$(document).ready(function() {
	scroltToId.init();
});