/* created on : 12/02/2015, 7:06:03 pm author : robin spark dependencies : isonscreen jquery plugin: http://upshots.org/javascript/jquery-test-if-element-is-in-viewport-visible-on-screen free for commerical purposes. */ /** * perform global replacement * @param string source contains characters to be replaced * @param string search contains characters to be searched for * @param string replacement contains the replacement characters * @returns string result of replacement */ function replaceallinstances(source, search, replacement) { var regex = new regexp(search, "g"); var result = source.replace(regex, replacement); return result; } $.fn.isonscreen = function (x, y) { if (x == null || typeof x == 'undefined') x = 1; if (y == null || typeof y == 'undefined') y = 1; var win = $(window); var viewport = { top: win.scrolltop(), left: win.scrollleft() }; viewport.right = viewport.left + win.width(); viewport.bottom = viewport.top + win.height(); var height = this.outerheight(); var width = this.outerwidth(); if (!width || !height) { return false; } var bounds = this.offset(); bounds.right = bounds.left + width; bounds.bottom = bounds.top + height; var visible = (!(viewport.right < bounds.left || viewport.left > bounds.right || viewport.bottom < bounds.top || viewport.top > bounds.bottom)); if (!visible) { return false; } var deltas = { top: math.min(1, (bounds.bottom - viewport.top) / height), bottom: math.min(1, (viewport.bottom - bounds.top) / height), left: math.min(1, (bounds.right - viewport.left) / width), right: math.min(1, (viewport.right - bounds.left) / width) }; return (deltas.left * deltas.right) >= x && (deltas.top * deltas.bottom) >= y; }; /* * init specified element so it can be gradually revealed. * * limitations: * only works on backgrounds with a solid color. * * @param options = { * id:'box3' * ,background='#ffffff' //default * ,delay='0' //default * } * */ $.fn.initreveal = function (options) { console.log('-------------'); console.log('selector:' + this.selector); var parent = $(this).parent(); //grab a copy of the contents, then remove it from dom var contents = $(this).clone(); $(this).empty(); var revealhtmlblock = "
"; revealhtmlblock = replaceallinstances(revealhtmlblock, "{class}", options.id); $(revealhtmlblock).appendto(parent); contents.appendto($('.reveal__inner-' + options.id)); //handle options //delay if (options.delay === undefined) { console.log('delay set to 0'); options.delay = 0; //set default } else { console.log('delay set to:' + options.delay); } var revealelementfunction = function (options) { $(this).performreveal(options); }; //background if (options.background !== undefined) { $('.reveal__cover-' + options.id + ' .reveal__cover-section').css({'background-color': options.background}); } //trigger the reveal at the specified time, unless auto is present and set to false if (options.auto === undefined || (options.auto !== undefined && options.auto)) { settimeout(function () { console.log('call'); revealelementfunction(options); }, options.delay); } //trigger on-visible if (options.trigger !== undefined) { var revealonscreenintervalidmap = {}; function uncovertext() { var onscreen = $('.reveal__inner-box4').isonscreen(); if ($('.reveal__inner-' + options.id).isonscreen()) { $('.reveal__cover-' + options.id).addclass('reveal__uncovered'); revealonscreenintervalidmap[options.id] = window.clearinterval(revealonscreenintervalidmap[options.id]); } } function showtextwhenvisible() { revealonscreenintervalidmap[options.id] = setinterval(uncovertext, 500); } showtextwhenvisible(); } }; //-------------------- /* * trigger options: * immediately (on page load) * on event, eg. onclick * on becoming visible, after it scrolls into view, or is displayed after bein ghidden * * @param options = { * id:'box3' * } * */ $.fn.performreveal = function (options) { var _performreveal = function () { $('.reveal__cover-' + options.id).addclass('reveal__uncovered'); }; //allow time for init code to complete settimeout(_performreveal, 250); };