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&interactive=1&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();
});