티스토리 수익 글 보기
;
(function ($, window, document, undefined) {
var pluginName = ‘mateHover’,
defaults = {
autoSize: ‘off’,
inhiritPadding: ‘on’,
position: ‘y’,
overlayStyle: ‘classic’,
rollingPosition: ‘top’,
doublePosition: ‘vertical’,
fourSpeedIn0: 200,
fourSpeedOut0: 200,
fourSpeedIn1: 800,
fourSpeedOut1: 800,
fourSpeedIn2: 300,
fourSpeedOut2: 300,
fourSpeedIn3: 800,
fourSpeedOut3: 800,
overlayBg: ‘#000’,
overlaySpeedIn: 500,
overlaySpeedOut: 500,
overlayOpacity: 0.4,
overlayEasing: ‘linear’,
popupSpeedIn: 1000,
popupSpeedOut: 500,
popupEasing: ‘swing’,
between: 10,
popup2SpeedIn: 800,
popup2SpeedOut: 800,
popup2Easing: ‘swing’
};
function Mate(element, options) {
this.element = $(element);
var ele = this;
this.options = $.extend({}, defaults, options);
this._defaults = defaults;
this._name = pluginName;
this.init(ele)
};
Mate.prototype.onResize = function () {
var ele = this;
this.img = this.element.children(‘img’);
this.popup = this.element.find(‘[data-zl-popup]’);
this.imgWidth = this.img.innerWidth();
this.imgHeight = this.img.innerHeight();
if (this.options.autoSize === ‘on’) {
this.element.css({
‘width’: this.imgWidth,
‘height’: this.imgHeight
})
};
if (this.options.inhiritPadding === ‘on’) {
this.divWidth = this.element.innerWidth();
this.divHeight = this.element.innerHeight()
} else {
this.divWidth = this.element.width();
this.divHeight = this.element.height()
};
this.calDivWidth = this.divWidth * 2;
this.calDivHeight = this.divHeight * 2;
this.divCalWidth = this.divWidth / 2;
this.divCalHeight = this.divHeight / 2;
this.divCalWidth2 = this.divWidth / 4;
this.divCalHeight2 = this.divHeight / 4;
this.popupWidth = this.popup.outerWidth();
this.popupHeight = this.popup.outerHeight();
this.calPopWidth = this.popupWidth * 2;
this.calPopHeight = this.popupHeight * 2;
this.coorW = this.divCalWidth – this.popupWidth / 2;
this.coorH = this.divCalHeight – this.popupHeight / 2;
this.count_pop = this.popup.length;
this.count_pop_label = 0;
if (this.count_pop > 1) {
this.count_pop_label = 1;
this.popup1 = this.popup.eq(0);
this.popup2 = this.popup.eq(1);
this.popup1Width = this.popup1.outerWidth();
this.popup2Width = this.popup2.outerWidth();
this.popup1Height = this.popup1.outerHeight();
this.popup2Height = this.popup2.outerHeight();
this.calPop1Width = this.popup1Width * 2;
this.calPop1Height = this.popup1Height * 2;
this.calPop2Width = this.popup2Width * 2;
this.calPop2Height = this.popup2Height * 2;
this.coor1W = this.divCalWidth – this.popup1Width / 2 – this.popup2Width / 2 – this.options.between;
this.coor1H = this.divCalHeight – this.popup1Height / 2;
this.coor2W = this.divCalWidth – this.popup2Width / 2 – this.popup1Width / 2 – this.options.between;
this.coor2H = this.divCalHeight – this.popup2Height / 2
};
this.over_pos = {
plus: {},
minus: {}
};
this.over_pos.plus[this.options.rollingPosition] = (this.options.rollingPosition === ‘top’ || this.options.rollingPosition === ‘bottom’) ? -this.divHeight – 10 : -this.divWidth – 10;
this.over_pos.minus[this.options.rollingPosition] = 0;
this.over_double_pos = {
position0: {},
position1: {},
minus: {},
fly_coor: {
top_left: {},
bottom_right: {}
}
};
this.over_fly_out = {
fly_coor: {
top_left: {},
bottom_right: {}
}
};
if (this.options.doublePosition === ‘vertical’) {
this.over_double_pos.position0[‘top’] = -this.divHeight;
this.over_double_pos.position1[‘bottom’] = -this.divHeight;
this.over_double_pos.minus[‘left’] = 0;
this.over_double_pos.position0[‘height’] = ‘50%’;
this.over_double_pos.position0[‘width’] = ‘100%’;
this.over_double_pos.position1[‘height’] = ‘50%’;
this.over_double_pos.position1[‘width’] = ‘100%’;
this.over_double_pos.fly_coor.top_left[‘top’] = 0;
this.over_double_pos.fly_coor.bottom_right[‘bottom’] = 0;
this.over_fly_out.fly_coor.top_left[‘top’] = -this.divHeight;
this.over_fly_out.fly_coor.bottom_right[‘bottom’] = -this.divHeight
} else {
this.over_double_pos.position0[‘left’] = -this.divWidth;
this.over_double_pos.position1[‘right’] = -this.divWidth;
this.over_double_pos.minus[‘top’] = 0;
this.over_double_pos.position0[‘height’] = ‘100%’;
this.over_double_pos.position0[‘width’] = ‘50%’;
this.over_double_pos.position1[‘height’] = ‘100%’;
this.over_double_pos.position1[‘width’] = ‘50%’;
this.over_double_pos.fly_coor.top_left[‘left’] = 0;
this.over_double_pos.fly_coor.bottom_right[‘right’] = 0;
this.over_fly_out.fly_coor.top_left[‘left’] = -this.divWidth;
this.over_fly_out.fly_coor.bottom_right[‘right’] = -this.divWidth
}; if (this.options.overlayStyle === ‘four’) {
this.over_four = {
inn: {},
out: {}
};
for (var speed_count_inout = 0; speed_count_inout <= 3; speed_count_inout++) {
this.over_four.inn['speed' + speed_count_inout] = this.options['fourSpeedIn' + speed_count_inout];
this.over_four.out['speed' + speed_count_inout] = this.options['fourSpeedOut' + speed_count_inout]
}
};
switch (this.options.position) {
case 'y':
this.startPosition('y', this.count_pop_label);
break;
case 'y-reverse':
this.startPosition('y-reverse', this.count_pop_label);
break;
case 'x':
this.startPosition('x', this.count_pop_label);
break;
case 'x-reverse':
this.startPosition('x-reverse', this.count_pop_label);
break;
case 'y+i':
this.startPosition('y+i', this.count_pop_label);
break;
case 'y+i-reverse':
this.startPosition('y+i-reverse', this.count_pop_label);
break;
case 'x+i':
this.startPosition('x+i', this.count_pop_label);
break;
case 'x+i-reverse':
this.startPosition('x+i-reverse', this.count_pop_label);
break;
default:
console.log('Wrong position properties(START POPUP POSITION)');
break
};
this.pos = {};
switch (this.options.position) {
case 'y':
this.flyPosition('y', this.count_pop_label);
break;
case 'y-reverse':
this.flyPosition('y-reverse', this.count_pop_label);
break;
case 'y+i':
this.flyPosition('y+i', this.count_pop_label);
break;
case 'y+i-reverse':
this.flyPosition('y+i-reverse', this.count_pop_label);
break;
case 'x':
this.flyPosition('x', this.count_pop_label);
break;
case 'x+i':
this.flyPosition('x+i', this.count_pop_label);
break;
case 'x-reverse':
this.flyPosition('x-reverse', this.count_pop_label);
break;
case 'x+i-reverse':
this.flyPosition('x+i-reverse', this.count_pop_label);
break;
default:
console.log('Wrong position properties(FLY POPUP POSITION)');
break
};
var general_overlay, left_or_top, left_or_top_double;
(this.options.rollingPosition === 'top' || this.options.rollingPosition === 'bottom') ? left_or_top = 'left' : left_or_top = 'top';
(this.options.doublePosition === 'vertical') ? left_or_top_double = 'left' : left_or_top_double = 'top';
this.element.find('[data-zl-overlay],[data-zl-ovrolling],[data-zl-ovdouble0],[data-zl-ovdouble1],[data-zl-ovzoom0],[data-zl-ovzoom1],[data-zl-ovzoom2],[data-zl-ovzoom3]').remove();
switch (this.options.overlayStyle) {
case 'classic':
general_overlay = $('‘).css(‘background’, ele.options.overlayBg);
ele.element.prepend(general_overlay);
break;
case ‘four’:
for (var overlay_count = 0; overlay_count <= 3; overlay_count++) {
general_overlay = $('‘).css({
‘background’: ele.options.overlayBg,
‘top’: -this.divHeight,
‘left’: this.divCalWidth2 * overlay_count
}).fadeTo(100, this.options.overlayOpacity);
ele.element.prepend(general_overlay)
};
break;
case ‘rolling’:
general_overlay = $(‘‘).css(this.over_pos.plus).fadeTo(100, this.options.overlayOpacity);
ele.element.prepend(general_overlay);
break;
case ‘double’:
for (var overlay_count_d = 0; overlay_count_d <= 1; overlay_count_d++) {
general_overlay = $('‘).css(this.over_double_pos[‘position’ + overlay_count_d]).fadeTo(100, this.options.overlayOpacity);
ele.element.prepend(general_overlay)
};
break
}
};
Mate.prototype.startPosition = function (x_or_y, count_pop_label) {
if (x_or_y === ‘y’ && count_pop_label === 0 || x_or_y === ‘y+i’ && count_pop_label === 0) {
this.popup.css({
‘left’: this.coorW,
‘top’: -this.calPopHeight
})
} else if (x_or_y === ‘y-reverse’ && count_pop_label === 0 || x_or_y === ‘y+i-reverse’ && count_pop_label === 0) {
this.popup.css({
‘left’: this.coorW,
‘bottom’: -this.calPopHeight
})
} else if (x_or_y === ‘x-reverse’ && count_pop_label === 0 || x_or_y === ‘x+i-reverse’ && count_pop_label === 0) {
this.popup.css({
‘top’: this.coorH,
‘right’: -this.calPopWidth
})
} else if (x_or_y === ‘x’ && count_pop_label === 0 || x_or_y === ‘x+i’ && count_pop_label === 0) {
this.popup.css({
‘top’: this.coorH,
‘left’: -this.calPopWidth
})
} else if (x_or_y === ‘y’ && count_pop_label === 1 || x_or_y === ‘y+i’ && count_pop_label === 1) {
this.popup1.css({
‘left’: this.coor1W,
‘top’: -this.calPop1Height
});
this.popup2.css({
‘right’: this.coor2W,
‘top’: -this.calPop2Height
})
} else if (x_or_y === ‘y-reverse’ && count_pop_label === 1 || x_or_y === ‘y+i-reverse’ && count_pop_label === 1) {
this.popup1.css({
‘left’: this.coor1W,
‘bottom’: -this.calPop1Height
});
this.popup2.css({
‘right’: this.coor2W,
‘bottom’: -this.calPop2Height
})
} else if (x_or_y === ‘x-reverse’ && count_pop_label === 1 || x_or_y === ‘x+i-reverse’ && count_pop_label === 1) {
this.popup1.css({
‘top’: this.coor1H,
‘right’: -this.calPop1Width
});
this.popup2.css({
‘top’: this.coor2H,
‘left’: -this.calPop2Width
})
} else if (x_or_y === ‘x’ && count_pop_label === 1 || x_or_y === ‘x+i’ && count_pop_label === 1) {
this.popup1.css({
‘top’: this.coor1H,
‘left’: -this.calPop1Width
});
this.popup2.css({
‘top’: this.coor2H,
‘right’: -this.calPop2Width
})
}
};
Mate.prototype.flyPosition = function (x_or_y, count_pop_label) {
if (x_or_y === ‘y’ && count_pop_label === 0) {
this.pos.anime_enter = {
top: this.coorH
}, this.pos.anime_leave = {
top: -this.calPopHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘top’: -this.calPopHeight
}
} else if (x_or_y === ‘y-reverse’ && count_pop_label === 0) {
this.pos.anime_enter = {
bottom: this.coorH
}, this.pos.anime_leave = {
bottom: -this.calPopHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘bottom’: -this.calPopHeight
}
} else if (x_or_y === ‘y+i-reverse’ && count_pop_label === 0) {
this.pos.anime_enter = {
bottom: this.coorH
}, this.pos.anime_leave = {
bottom: this.calDivHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘bottom’: -this.calPopHeight
}
} else if (x_or_y === ‘y+i’ && count_pop_label === 0) {
this.pos.anime_enter = {
top: this.coorH
}, this.pos.anime_leave = {
top: this.calDivHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘top’: -this.calPopHeight
}
} else if (x_or_y === ‘x’ && count_pop_label === 0) {
this.pos.anime_enter = {
left: this.coorW
}, this.pos.anime_leave = {
left: -this.calPopWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘left’: -this.calPopWidth
}
} else if (x_or_y === ‘x+i’ && count_pop_label === 0) {
this.pos.anime_enter = {
left: this.coorW
}, this.pos.anime_leave = {
left: this.calDivWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘left’: -this.calPopWidth
}
} else if (x_or_y === ‘x-reverse’ && count_pop_label === 0) {
this.pos.anime_enter = {
right: this.coorW
}, this.pos.anime_leave = {
right: -this.calPopWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘right’: -this.calPopWidth
}
} else if (x_or_y === ‘x+i-reverse’ && count_pop_label === 0) {
this.pos.anime_enter = {
right: this.coorW
}, this.pos.anime_leave = {
right: this.calDivWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘right’: -this.calPopWidth
}
} else if (x_or_y === ‘y’ && count_pop_label === 1) {
this.pos.anime_enter = {
top: this.coor1H
}, this.pos.anime_leave = {
top: -this.calPop1Height
}, this.pos.back_css = {
‘display’: ‘none’,
‘top’: -this.calPop1Height
};
this.pos.anime_enter2 = {
top: this.coor2H
}, this.pos.anime_leave2 = {
top: -this.calPop2Height
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘top’: -this.calPop2Height
}
} else if (x_or_y === ‘y-reverse’ && count_pop_label === 1) {
this.pos.anime_enter = {
bottom: this.coor1H
}, this.pos.anime_leave = {
bottom: -this.calPop1Height
}, this.pos.back_css = {
‘display’: ‘none’,
‘bottom’: -this.calPop1Height
};
this.pos.anime_enter2 = {
bottom: this.coor2H
}, this.pos.anime_leave2 = {
bottom: -this.calPop2Height
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘bottom’: -this.calPop2Height
}
} else if (x_or_y === ‘y+i-reverse’ && count_pop_label === 1) {
this.pos.anime_enter = {
bottom: this.coor1H
}, this.pos.anime_leave = {
bottom: this.calDivHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘bottom’: -this.calPop1Height
};
this.pos.anime_enter2 = {
bottom: this.coor2H
}, this.pos.anime_leave2 = {
bottom: this.calDivHeight
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘bottom’: -this.calPop2Height
}
} else if (x_or_y === ‘y+i’ && count_pop_label === 1) {
this.pos.anime_enter = {
top: this.coor1H
}, this.pos.anime_leave = {
top: this.calDivHeight
}, this.pos.back_css = {
‘display’: ‘none’,
‘top’: -this.calPop1Height
};
this.pos.anime_enter2 = {
top: this.coor2H
}, this.pos.anime_leave2 = {
top: this.calDivHeight
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘top’: -this.calPop2Height
}
} else if (x_or_y === ‘x’ && count_pop_label === 1) {
this.pos.anime_enter = {
left: this.coor1W
}, this.pos.anime_leave = {
left: -this.calPop1Width
}, this.pos.back_css = {
‘display’: ‘none’,
‘left’: -this.calPop1Width
};
this.pos.anime_enter2 = {
right: this.coor2W
}, this.pos.anime_leave2 = {
right: -this.calPop2Width
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘right’: -this.calPop2Width
}
} else if (x_or_y === ‘x-reverse’ && count_pop_label === 1) {
this.pos.anime_enter = {
right: this.coor1W
}, this.pos.anime_leave = {
right: -this.calPop1Width
}, this.pos.back_css = {
‘display’: ‘none’,
‘right’: -this.calPop1Width
};
this.pos.anime_enter2 = {
left: this.coor2W
}, this.pos.anime_leave2 = {
left: -this.calPop2Width
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘left’: -this.calPop2Width
}
} else if (x_or_y === ‘x+i’ && count_pop_label === 1) {
this.pos.anime_enter = {
left: this.coor1W
}, this.pos.anime_leave = {
left: this.calDivWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘left’: -this.calPop1Width
};
this.pos.anime_enter2 = {
right: this.coor2W
}, this.pos.anime_leave2 = {
right: this.calDivWidth
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘right’: -this.calPop2Width
}
} else if (x_or_y === ‘x+i-reverse’ && count_pop_label === 1) {
this.pos.anime_enter = {
right: this.coor1W
}, this.pos.anime_leave = {
right: this.calDivWidth
}, this.pos.back_css = {
‘display’: ‘none’,
‘right’: -this.calPop1Width
};
this.pos.anime_enter2 = {
left: this.coor2W
}, this.pos.anime_leave2 = {
left: this.calDivWidth
}, this.pos.back_css2 = {
‘display’: ‘none’,
‘left’: -this.calPop2Width
}
}
};
Mate.prototype.overlayGet = function (ele, overlayStyle, speed, opacity, over_pos) {
switch (overlayStyle) {
case ‘classic’:
ele.element.children(‘[data-zl-overlay]’).stop(true).fadeTo(speed, opacity, ele.options.overlayEasing);
break;
case ‘four’:
var obj_count = 0;
for (var obj_proper in speed) {
ele.element.children(‘[data-zl-ovzoom’ + obj_count + ‘]’).stop(true).animate({
top: over_pos
}, speed[obj_proper], ele.options.overlayEasing);
obj_count++
};
break;
case ‘rolling’:
ele.element.children(‘[data-zl-ovrolling]’).css(‘display’, ‘block’).stop(true).animate(over_pos, speed, ele.options.overlayEasing);
break;
case ‘double’:
ele.element.children(‘[data-zl-ovdouble0]’).css(‘display’, ‘block’).stop(true).animate(over_pos.top_left, speed, ele.options.overlayEasing);
ele.element.children(‘[data-zl-ovdouble1]’).css(‘display’, ‘block’).stop(true).animate(over_pos.bottom_right, speed, ele.options.overlayEasing);
break
}
};
Mate.prototype.hover = function (ele, count_pop_label) {
this.element.on({
mouseenter: function () {
switch (count_pop_label) {
case 0:
ele.popup.css(ele.pos.back_css).css(‘display’, ‘block’).stop(true).animate(ele.pos.anime_enter, ele.options.popupSpeedIn, ele.options.popupEasing);
switch (ele.options.overlayStyle) {
case ‘classic’:
ele.overlayGet(ele, ‘classic’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, 0);
break;
case ‘four’:
ele.overlayGet(ele, ‘four’, ele.over_four.inn, 0, ele.divHeight);
break;
case ‘rolling’:
ele.overlayGet(ele, ‘rolling’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, ele.over_pos.minus);
break;
case ‘double’:
ele.overlayGet(ele, ‘double’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, ele.over_double_pos.fly_coor);
break
};
break;
case 1:
ele.popup1.css(ele.pos.back_css).css(‘display’, ‘block’).stop(true).animate(ele.pos.anime_enter, ele.options.popupSpeedIn, ele.options.popupEasing).siblings(‘[data-zl-popup]’).css(ele.pos.back_css2).css(‘display’, ‘block’).stop(true).animate(ele.pos.anime_enter2, ele.options.popup2SpeedIn, ele.options.popup2Easing);
switch (ele.options.overlayStyle) {
case ‘classic’:
ele.overlayGet(ele, ‘classic’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, 0);
break;
case ‘four’:
ele.overlayGet(ele, ‘four’, ele.over_four.inn, 0, ele.divHeight);
break;
case ‘rolling’:
ele.overlayGet(ele, ‘rolling’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, ele.over_pos.minus);
break;
case ‘double’:
ele.overlayGet(ele, ‘double’, ele.options.overlaySpeedIn, ele.options.overlayOpacity, ele.over_double_pos.fly_coor);
break
};
break
}
},
mouseleave: function () {
switch (count_pop_label) {
case 0:
ele.popup.stop(true).animate(ele.pos.anime_leave, ele.options.popupSpeedOut, ele.options.popupEasing).children(‘input’).blur();
switch (ele.options.overlayStyle) {
case ‘classic’:
ele.overlayGet(ele, ‘classic’, ele.options.overlaySpeedOut, 0, 0);
break;
case ‘four’:
ele.overlayGet(ele, ‘four’, ele.over_four.out, 0, -ele.divHeight);
break;
case ‘rolling’:
ele.overlayGet(ele, ‘rolling’, ele.options.overlaySpeedOut, 0, ele.over_pos.plus);
break;
case ‘double’:
ele.overlayGet(ele, ‘double’, ele.options.overlaySpeedOut, 0, ele.over_fly_out.fly_coor);
break
};
break;
case 1:
ele.popup1.stop(true, true).animate(ele.pos.anime_leave, ele.options.popupSpeedOut, ele.options.popupEasing).children(‘input’).blur().end().siblings(‘[data-zl-popup]’).stop(true, true).animate(ele.pos.anime_leave2, ele.options.popup2SpeedOut, ele.options.popup2Easing).children(‘input’).blur();
switch (ele.options.overlayStyle) {
case ‘classic’:
ele.overlayGet(ele, ‘classic’, ele.options.overlaySpeedOut, 0, 0);
break;
case ‘four’:
ele.overlayGet(ele, ‘four’, ele.over_four.out, 0, -ele.divHeight);
break;
case ‘rolling’:
ele.overlayGet(ele, ‘rolling’, ele.options.overlaySpeedOut, 0, ele.over_pos.plus);
break;
case ‘double’:
ele.overlayGet(ele, ‘double’, ele.options.overlaySpeedOut, 0, ele.over_fly_out.fly_coor);
break
};
break
}
}
})
};
Mate.prototype.init = function (ele) {
$(window).resize($.proxy(this, ‘onResize’));
this.onResize();
this.hover(ele, this.count_pop_label)
};
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, ‘plugin_’ + pluginName)) {
$.data(this, ‘plugin_’ + pluginName, new Mate(this, options))
}
})
}
})(jQuery, window, document);