(function(theme, $){
'use strict';
theme=theme||{};
var instanceName='__parallax';
var Parallax=function($el, opts){
return this.initialize($el, opts);
};
Parallax.defaults={
speed: 1.5,
horizontalPosition: '50%',
offset: 0,
scale: false,
startOffset: 7,
scaleInvert: false,
};
Parallax.prototype={
initialize: function($el, opts){
if($el.data(instanceName)){
return this;
}
this.$el=$el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function(){
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts){
this.options=$.extend(true, {}, Parallax.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function(){
var self=this,
$window=$(window),
offset,
yPos,
bgpos,
background;
background=$('<div class="parallax-background"></div>');
var bg=self.options.wrapper.data('image-src') ? 'url(' + self.options.wrapper.data('image-src') + ')':self.options.wrapper.css('background-image');
background.css({
'background-image': bg,
'background-size': 'cover',
'background-position': '50% 0%',
'position': 'absolute',
'top': 0,
'left': 0,
'width': '100%',
'height': self.options.speed * 100 + '%'
});
self.options.wrapper.prepend(background);
self.options.wrapper.css({
'position': 'relative',
'overflow': 'hidden'
});
if(self.options.wrapper.attr('data-parallax-type')){
self.options.parallaxType='horizontal';
background.css({
'background-position': '0% 50%',
'width': self.options.speed * 100 + '%',
'height': '100%',
});
}
if(self.options.scale){
background.wrap('<div class="parallax-scale-wrapper"></div>');
background.css({
'transition': 'transform 500ms ease-out'
});
this.scaleParallaxFunc=this.scaleParallax.bind(this);
this.scaleParallaxFunc();
window.addEventListener('scroll', this.scaleParallaxFunc);
window.addEventListener('resize', this.scaleParallaxFunc);
}
var parallaxEffectOnScrolResize=function(){
var skrollr_size=100 * self.options.speed,
skrollr_start=-(skrollr_size - 100);
if(!self.options.parallaxType){
background.attr("data-bottom-top", "top: " + skrollr_start + "%;").attr("data-top-bottom", "top: 0%;");
}else{
skrollr_start /=9.8;
background.attr("data-bottom-top", "left: " + skrollr_start + "%;").attr("data-top-bottom", "left: 0%;");
}}
if(!theme.is_device_mobile){
parallaxEffectOnScrolResize();
}else{
if(self.options.enableOnMobile==true){
parallaxEffectOnScrolResize();
}else{
self.options.wrapper.addClass('parallax-disabled');
}}
return this;
},
scaleParallax: function(){
var self=this,
$window=$(window),
scrollTop=$window.scrollTop(),
$background=self.options.wrapper.find('.parallax-background'),
elementOffset=self.options.wrapper.offset().top,
currentElementOffset=(elementOffset - scrollTop),
scrollPercent=Math.abs(+(currentElementOffset - $window.height()) /(self.options.startOffset ? self.options.startOffset:7));
scrollPercent=parseInt(( scrollPercent >=100) ? 100:scrollPercent);
var currentScale=(scrollPercent / 100) * 50;
if(!self.options.scaleInvert){
$background.css({
'transform': 'scale(1.' + String(currentScale).padStart(2, '0') + ', 1.' + String(currentScale).padStart(2, '0') + ')'
});
}else{
$background.css({
'transform': 'scale(1.' + String(50 - currentScale).padStart(2, '0') + ', 1.' + String(50 - currentScale).padStart(2, '0') + ')'
});
}},
disable: function(){
var self=this;
if(self.options.scale){
window.removeEventListener('scroll', this.scaleParallaxFunc);
window.removeEventListener('resize', this.scaleParallaxFunc);
}}
};
$.extend(theme, {
Parallax: Parallax
});
$.fn.themeParallax=function(opts){
if(typeof skrollr=='undefined'){
return this;
}
var obj=this.map(function(){
var $this=$(this);
if($this.data(instanceName)){
return $this.data(instanceName);
}else{
return new theme.Parallax($this, opts);
}});
if(theme.portoSkrollr){
theme.portoSkrollr.refresh();
}else if(!theme.is_device_mobile){
theme.portoSkrollr=skrollr.init({ forceHeight: false, smoothScrolling: false, mobileCheck: function(){ return theme.is_device_mobile }});
}
return obj;
}}).apply(this, [window.theme, jQuery]);
(function($, theme){
if(theme.isReady){
if($.fn.themeParallax){
$(function(){
$('[data-plugin-parallax]:not(.manual)').each(function(){
var $this=$(this),
opts;
var pluginOptions=$this.data('plugin-options'),
parallaxScale=$this.attr('data-parallax-scale');
if(pluginOptions)
opts=pluginOptions;
if(typeof parallaxScale!=='undefined'){
opts['scale']=true;
if(parallaxScale=='invert'){
opts['scaleInvert']=true;
}}
$this.themeParallax(opts);
});
});
}}
$(document.body).on('porto_init', function(e, $wrap){
if($.fn.themeParallax){
$(function(){
$wrap.find('[data-plugin-parallax]:not(.manual)').each(function(){
var $this=$(this),
opts;
var pluginOptions=$this.data('plugin-options'),
parallaxScale=$this.attr('data-parallax-scale');
if(pluginOptions)
opts=pluginOptions;
if(typeof parallaxScale!=='undefined'){
opts['scale']=true;
if(parallaxScale=='invert'){
opts['scaleInvert']=true;
}}
$this.themeParallax(opts);
});
});
}});
})(window.jQuery, window.theme);