/*
waitMe - 1.12 [12.05.15]
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,
containerSize,
elemSize,
_options,
currentID;
var methods = {
init : function() {
var _defaults = {
effect: 'bounce',
text: '',
bg: 'rgba(255,255,255,0.7)',
color: '#000',
sizeW: '',
sizeH: '',
source: ''
};
_options = $.extend(_defaults, method);
currentID = new Date().getMilliseconds();
waitMeObj = $('
');
var size = 'width:' + _options.sizeW + ';height:' + _options.sizeH;
switch (_options.effect) {
case 'none':
effectElemCount = 0;
break;
case 'bounce':
effectElemCount = 3;
containerSize = '';
elemSize = size;
break;
case 'rotateplane':
effectElemCount = 1;
containerSize = '';
elemSize = size;
break;
case 'stretch':
effectElemCount = 5;
containerSize = '';
elemSize = size;
break;
case 'orbit':
effectElemCount = 2;
containerSize = size;
elemSize = '';
break;
case 'roundBounce':
effectElemCount = 12;
containerSize = size;
elemSize = '';
break;
case 'win8':
effectElemCount = 5;
createSubElem = true;
containerSize = size;
elemSize = size;
break;
case 'win8_linear':
effectElemCount = 5;
createSubElem = true;
containerSize = size;
elemSize = '';
break;
case 'ios':
effectElemCount = 12;
containerSize = size;
elemSize = '';
break;
case 'facebook':
effectElemCount = 3;
containerSize = '';
elemSize = size;
break;
case 'rotation':
effectElemCount = 1;
specificAttr = 'border-color';
containerSize = '';
elemSize = size;
break;
case 'timer':
effectElemCount = 2;
addStyle = 'border-color:' + _options.color;
containerSize = size;
elemSize = '';
break;
case 'pulse':
effectElemCount = 1;
specificAttr = 'border-color';
containerSize = '';
elemSize = size;
break;
case 'progressBar':
effectElemCount = 1;
containerSize = '';
elemSize = size;
break;
case 'bouncePulse':
effectElemCount = 3;
containerSize = '';
elemSize = size;
break;
case 'img':
effectElemCount = 1;
containerSize = '';
elemSize = size;
break;
}
if (_options.sizeW === '' && _options.sizeH === '') {
elemSize = '';
containerSize = '';
}
if (containerSize !== '' && addStyle !== '') {
addStyle = ';' + addStyle;
}
if (effectElemCount > 0) {
effectObj = $('');
if(_options.effect == 'img') {
effectElemHTML = '
';
} else {
for (var i = 1; i <= effectElemCount; ++i) {
if (createSubElem) {
effectElemHTML += '';
} else {
effectElemHTML += '';
}
}
}
effectObj = $('' + effectElemHTML + '
');
}
if (_options.text) {
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'});
function setElTop(getTop) {
elemContentObj.css({top: 'auto', transform: 'translateY(' + getTop + 'px) translateZ(0)'});
}
if (elem.outerHeight() > $(window).height()) {
var sTop = $(window).scrollTop();
var elH = elemContentObj.outerHeight();
var elTop = elem.offset().top;
var cH = elem.outerHeight();
var 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();
var getTop = sTop - elTop + $(window).height()/2;
if (getTop - elH >= 0 && getTop + elH <= cH) {
setElTop(getTop);
}
});
}
},
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);
}
$.event.special.destroyed = {
remove: function(o) {
if (o.handler) {
o.handler();
}
}
};
});
};
$(window).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);