/* waitMe - 1.15 [15.02.16] Author: vadimsva Github: https://github.com/vadimsva/waitMe */ (function($) { $.fn.waitMe = function(method) { return this.each(function() { var elem = $(this), elemClass = 'waitMe', waitMe_text, effectObj, effectElemCount, createSubElem = false, specificAttr = 'background-color', addStyle = '', effectElemHTML = '', waitMeObj, _options, currentID; var methods = { init : function() { var _defaults = { effect: 'bounce', text: '', bg: 'rgba(255,255,255,0.7)', color: '#000', maxSize: '', source: '', onClose: function() {} }; _options = $.extend(_defaults, method); currentID = new Date().getMilliseconds(); waitMeObj = $('
'); switch (_options.effect) { case 'none': effectElemCount = 0; break; case 'bounce': effectElemCount = 3; break; case 'rotateplane': effectElemCount = 1; break; case 'stretch': effectElemCount = 5; break; case 'orbit': effectElemCount = 2; break; case 'roundBounce': effectElemCount = 12; break; case 'win8': effectElemCount = 5; createSubElem = true; break; case 'win8_linear': effectElemCount = 5; createSubElem = true; break; case 'ios': effectElemCount = 12; break; case 'facebook': effectElemCount = 3; break; case 'rotation': effectElemCount = 1; specificAttr = 'border-color'; break; case 'timer': effectElemCount = 2; if ($.isArray(_options.color)) { var color = _options.color[0]; } else { var color = _options.color; } addStyle = 'border-color:' + color; break; case 'pulse': effectElemCount = 1; specificAttr = 'border-color'; break; case 'progressBar': effectElemCount = 1; break; case 'bouncePulse': effectElemCount = 3; break; case 'img': effectElemCount = 1; break; } if (addStyle !== '') { addStyle += ';'; } if (effectElemCount > 0) { if(_options.effect === 'img') { effectElemHTML = ''; } else { for (var i = 1; i <= effectElemCount; ++i) { if ($.isArray(_options.color)) { var color = _options.color[i]; if (color == undefined) { color = '#000'; } } else { var color = _options.color; } if (createSubElem) { effectElemHTML += '
'; } else { effectElemHTML += '
'; } } } effectObj = $('
' + effectElemHTML + '
'); } if (_options.text && _options.maxSize === '') { if ($.isArray(_options.color)) { var color = _options.color[0]; } else { var color = _options.color; } waitMe_text = $('
' + _options.text + '
'); } var elemObj = elem.find('> .' + elemClass); if (elemObj) { elemObj.remove(); } var waitMeDivObj = $('
'); waitMeDivObj.append(effectObj, waitMe_text); waitMeObj.append(waitMeDivObj); if (elem[0].tagName == 'HTML') { elem = $('body'); } elem.addClass(elemClass + '_container').attr('data-waitme_id', currentID).append(waitMeObj); elemObj = elem.find('> .' + elemClass); var elemContentObj = elem.find('.' + elemClass + '_content'); elemObj.css({background: _options.bg}); elemContentObj.css({marginTop: - elemContentObj.outerHeight() / 2 + 'px'}); if (_options.maxSize !== '') { var elemH = effectObj.outerHeight(); var elemW = effectObj.outerWidth(); var elemMax = elemH; if (_options.effect === 'img') { effectObj.css({height: _options.maxSize + 'px'}); effectObj.find('>img').css({maxHeight: '100%'}); elemContentObj.css({marginTop: - elemContentObj.outerHeight() / 2 + 'px'}); } else { if (_options.maxSize < elemMax) { waitMeDivObj.css({transform: 'scale(' + _options.maxSize / elemMax + ')'}); } } } function setElTop(getTop) { elemContentObj.css({top: 'auto', transform: 'translateY(' + getTop + 'px) translateZ(0)'}); } if (elem.outerHeight() > $(window).height()) { var sTop = $(window).scrollTop(), elH = elemContentObj.outerHeight(), elTop = elem.offset().top, cH = elem.outerHeight(), getTop = sTop - elTop + $(window).height()/2; if (getTop < 0) { getTop = Math.abs(getTop); } if (getTop - elH >= 0 && getTop + elH <= cH) { if (elTop - sTop > $(window).height()/2) { getTop = elH; } setElTop(getTop); } else { if (sTop > elTop + cH - elH) { getTop = sTop - elTop - elH; } else { getTop = sTop - elTop + elH; } setElTop(getTop); } $(document).scroll(function() { var sTop = $(window).scrollTop(), getTop = sTop - elTop + $(window).height()/2; if (getTop - elH >= 0 && getTop + elH <= cH) { setElTop(getTop); } }); } elemObj.on('destroyed', function() { if (_options.onClose && $.isFunction(_options.onClose)) { _options.onClose(); } elemObj.trigger('close'); }); $.event.special.destroyed = { remove: function(o) { if (o.handler) { o.handler(); } } }; return elemObj; }, hide : function() { waitMeClose(); } }; function waitMeClose() { var currentID = elem.attr('data-waitme_id'); elem.removeClass(elemClass + '_container').removeAttr('data-waitme_id'); elem.find('.' + elemClass + '[data-waitme_id="' + currentID + '"]').remove(); } if (methods[method]) { return methods[method].apply( this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || ! method) { return methods.init.apply(this, arguments); } }); }; $(window).on('load', function(){ $('body.waitMe_body').addClass('hideMe'); setTimeout(function(){ $('body.waitMe_body').find('.waitMe_container:not([data-waitme_id])').remove(); $('body.waitMe_body').removeClass('waitMe_body hideMe'); },200); }); })(jQuery);