').appendTo(target_slide);
//when image is loaded hide loading animation
$('
').appendTo(target_slide);
target_slide.removeClass('image-loading');
//cover.hide().fadeOut(minorShowTime);
})
.attr('src', slide_options.image);
target_slide.addClass('image-loading' + (addClass? ' '+bonus_class : ''));
TweenMax.set(target_slide, hidden);
if(slide_options.video_type === 'html5'){
target_slide.append($(slide_options.video_url).html());
}
else{
target_slide.append('
');
}
if(slide_options.video_type === 'youtube'){
//cause youTube iframe API breaks on firefox when using iframes
//we will grab parameters and then switch iframe with div with same id
var frame = target_slide.find('iframe'),
vid_id = frame.attr('src'),
width = frame.width(),
height = frame.height(),
temp;
//search for video id
temp = /embed\/([a-zA-Z0-9\-_]+)\??/ig.exec(vid_id);
if(temp !== null && temp.length === 2){
vid_id = temp[1];
}
//insert empty div & remove old iframe
$('
',{
'data-vid_id': vid_id,
'data-width': width,
'data-height': height
}).insertBefore(frame);
frame.remove();
}
if(first){
launch();
//if first slide is video with autoplay enabled
if(slide_type === 'video'){
if(_getField('autoplay')){
stopMovingToNextSlide();
playVideo();
}
else{
pauseVideo();//need for YT video if it is first slide
}
}
}
}
var socials = options.original_items.eq(slide_to_fill_number).find('.a2a_kit');
//add texts to slide?
if(options.texts){
var text_html,
title = $.trim(slide_options.title),
desc = $.trim(slide_options.desc),
sc_classes = 'slide-caption';
sc_classes += (title_color.length? ' with-color' : '');
sc_classes += (desc.length || socials.length? ' with-description' : '');
//title color
if(title.length && title_color.length){
title = '
'+title+'';
}
//add caption
if (title.length || desc.length || socials.length){
text_html =
'
' +
(title.length ? '
'+title+'
' : '') +
((desc.length || socials.length) ? '
'+desc+'
' : '') +
'
+
' +
'
';
target_slide.append(text_html);
if(options.socials){
target_slide.find('div.description').append( socials );
}
//prepare new slide description
if(!first){
TweenMax.set(target_slide.find('div.slide-caption'),{autoAlpha:0});
}
}
}
else{
if(options.socials && socials.length){
target_slide
//prepare description HTML
.append('
')
//add socials
.find('div.description').append( socials );
}
}
if(first){ TweenMax.set(target_slide, {x : '0%', visibility:'visible'}); } //remove initial "hide" for first slide
}
},
/* Change Slide
----------------------------*/
changeSlide = function(move_to_previous_slide, from_drag){
if(typeof move_to_previous_slide === 'undefined'){ move_to_previous_slide = false; }
if(typeof from_drag === 'undefined'){ from_drag = false; }
if(is_slider_playing){
stopMovingToNextSlide();
}
// Find active slide
var slide_to_hide = all_slides.filter('.activeslide'),
pre_prev_slide = all_slides.filter('.prevslide');
if(slide_to_hide){
//pause playing video
pauseVideo(slide_to_hide.data('slide-id'));
}
// Get the slide number of new slide
current_slide_number = move_to_previous_slide? _getPreviousSlideNumber() : _getNextSlideNumber();
//clean old prev slide
pre_prev_slide.removeClass('prevslide');
//finish instantly old slides
if(TweenMax.isTweening( pre_prev_slide )){
TweenMax.getTweensOf(pre_prev_slide)[0].totalProgress(1);
}
// Remove active class & update previous slide
slide_to_hide.removeClass('activeslide').addClass('prevslide');
var afterChangeCallBack = function(){ _hideSlides(slide_to_hide); },
slide_to_show = all_slides.eq(current_slide_number);
fillSurroundingSlides(current_slide_number);
// Call function for before slide transition
beforeAnimation();
slide_to_show.addClass('activeslide');
//change slide from drag event
if(from_drag){
afterAnimation();
afterChangeCallBack();
}
//normal slide change
else{
slide_to_show.css({visibility:'hidden'});
switch(transition_type){
case 0: // No transition
TweenMax.set(slide_to_show, {x : '0%', visibility:'visible'});
afterChangeCallBack();
afterAnimation();
break;
case 1: // Fade
case 3: //KenBurns
TweenMax.fromTo(slide_to_show, transition_speed, { autoAlpha : 0, x : '0%'}, { autoAlpha : 1, onComplete : afterAnimation} );
TweenMax.to(slide_to_hide, transition_speed, {autoAlpha : 0});
break;
case 2: // Carousel
var slider_width = $slides_list.width();//need for proper drag interactions
TweenMax.fromTo(slide_to_show, transition_speed, { autoAlpha : 1, xPercent : '0%', x : (move_to_previous_slide? -slider_width : slider_width) }, {x : 0, ease: Power2.easeInOut, onComplete : afterAnimation} );
TweenMax.fromTo(slide_to_hide, transition_speed, {x : 0}, {x : (move_to_previous_slide? slider_width : -slider_width), ease: Power2.easeInOut, onComplete : afterChangeCallBack});
break;
}
}
},
prevSlide = function(ev){
if(typeof ev !== 'undefined'){
ev.preventDefault();
}
if (slides_num > 1){
changeSlide(true);
}
},
nextSlide = function(ev){
if(typeof ev !== 'undefined'){
ev.preventDefault();
}
if (slides_num > 1){
changeSlide();
}
},
playToggle = function(ev){
if(typeof ev !== 'undefined'){
ev.preventDefault();
}
//no need to work when there is one slide
if (slides_num < 2){ return; }
//pause it
if (is_slider_playing){
indicatePlayerState('pause');
stopMovingToNextSlide();
kenBurnsEffectPause();
is_slider_playing = false;
}
//play it
else{
indicatePlayerState('play');
startMovingToNextSlide();
kenBurnsEffect();
is_slider_playing = true;
}
},
indicatePlayerState = function(state){
var big_play = $root.find('.slider-play-animation'),
play_svg = big_play.find('.svg-big-play'),
pause_svg = big_play.find('.svg-big-pause');
if (state === 'play'){
play_button.addClass(state).removeClass('pause');
big_play.addClass(state).removeClass('pause');
}
else if (state === 'pause'){
play_button.addClass(state).removeClass('play');
big_play.addClass(state).removeClass('play');
}
//no big play above videos to not confuse anyone
if(_getField('type') === 'video'){
return;
}
TweenMax.set(big_play,{autoAlpha: 1, scale: 0.7, display: 'block'});
TweenMax.to(big_play, .6, {autoAlpha : 0, scale: 1.5, display:'none'} );
//reset both
TweenMax.set([pause_svg, play_svg], {display:'none'});
//animate
TweenMax.set((state === 'play' ? play_svg : pause_svg), {display:'block'});
},
stopMovingToNextSlide = function(){
stopProgressBar();
clearTimeout(slideshow_interval_id);
},
startMovingToNextSlide = function(){
slideshow_interval_id = setTimeout(nextSlide, slider_interval_time);
progressBar();
},
/* Go to specific slide
----------------------------*/
goTo = function(targetSlide){
// If target outside range
if(targetSlide < 0){
targetSlide = 0;
}
else if(targetSlide > slides_num-1){
targetSlide = slides_num - 1;
}
if (current_slide_number === targetSlide){
return;
}
fillSlide(targetSlide);
clean_after_goTo_function = 1;
// If ahead of current position
if(current_slide_number < targetSlide){
// Adjust for new next slide
current_slide_number = targetSlide-1; //need to go step back
nextSlide();
}
//Otherwise it's before current position
else if(current_slide_number > targetSlide){
// Adjust for new prev slide
current_slide_number = targetSlide+1; //need to go step forward
prevSlide();
}
if (thumb_links){
thumbs.filter('.current-slide').removeClass('current-thumb');
thumbs.eq(targetSlide).addClass('current-thumb');
}
},
/* Save Original Dimensions of images
----------------------------*/
_origDim = function(targetSlide){
targetSlide.data('origWidth', targetSlide.width()).data('origHeight', targetSlide.height());
},
/***** small helpers functions *****/
_animateThumbs = function(left){ // move thumbs
TweenMax.to(thumb_list, 0.5, {x:left});
},
_hideSlides = function(slide){
TweenMax.set(slide, hidden);
},
_getField = function(field){
return (typeof slides[current_slide_number][field] === 'undefined')? "" : slides[current_slide_number][field];
},
_getPreviousSlideNumber = function(number){
number = typeof number === 'undefined' ? current_slide_number : number;
return number <= 0 ? slides_num - 1 : number - 1;
},
_getNextSlideNumber = function(number){
number = typeof number === 'undefined' ? current_slide_number : number;
return number >= slides_num - 1 ? 0 : number + 1;
},
kenBurnsEffect = function(){
//Ken burns aka Zooming effect?
if(transition_type === 3){
if(_getField('type') === 'image'){
var this_img = all_slides.eq(current_slide_number).find('a.slide').children();//img
var getFromRange = function(from,to){
if(from > to ){
//switch to correct order
var temp = to;
to = from;
from = temp;
}
return Math.floor(Math.random()*(to-from+1)) + from;
},
rand = Math.random(),
time = 2*transition_speed + slider_interval_time/1000,
scale = parseInt(options.ken_burns_scale, 10)/100,
start_transition_time = 0.5,
w = parseInt(this_img.width(), 10),
h = parseInt(this_img.height(), 10),
top = parseInt(this_img.css('top'), 10)*0.2,
left = parseInt(this_img.css('left'), 10)*0.2,
zoom_w = w * scale,
zoom_h = h * scale,
zoom_top = (top - (zoom_h - h)/ 2),
zoom_left = (left - (zoom_w - w)/ 2),
start_vars, end_vars,
start_shift_left = getFromRange(-left,left),
start_shift_top = getFromRange(-top,top),
end_shift_left = getFromRange(-zoom_left, zoom_left),
end_shift_top = getFromRange(-zoom_top, zoom_top);
/** @namespace Linear.easeNone */
start_vars = {
scale : 1,
x : start_shift_left,
y : start_shift_top,
ease : Linear.easeNone
};
end_vars = {
scale : scale,
x : end_shift_left,
y : end_shift_top,
ease: Linear.easeNone
};
this_img[0].animation = typeof this_img[0].animation === 'undefined' ? new TimelineLite : this_img[0].animation;
//smooth effect if slider is playing now
if (is_slider_playing){
this_img[0].animation
.pause()
.clear()
.fromTo(
this_img,
time,
rand > 0.5 ? start_vars : end_vars,
rand > 0.5 ? end_vars : start_vars
)
.play(0);
}
//soft start
else{
this_img[0].animation
.pause()
.clear()
.to(
this_img,
start_transition_time,
rand > 0.5 ? start_vars : end_vars
)
.to(
this_img,
time - start_transition_time,
rand > 0.5 ? end_vars : start_vars
)
.play(0);
}
}
}
},
kenBurnsEffectPause = function(){
//Ken burns aka Zooming effect?
if(transition_type === 3 && _getField('type') === 'image'){
var this_img = all_slides.eq(current_slide_number).find('a.slide').children();//img
if(typeof this_img[0].animation !== 'undefined'){
if(this_img[0].animation.isActive()){
this_img[0].animation.pause().reverse();
}
}
}
},
afterAnimation = function(){
// Update previous slide
if (clean_after_goTo_function){
clean_after_goTo_function = false;
all_slides.filter('.prevslide').removeClass('prevslide');
all_slides.eq(_getPreviousSlideNumber()).addClass('prevslide');
}
//show description of new slide
var new_slide_desc = all_slides.eq(current_slide_number).find('div.slide-caption');
if(new_slide_desc.length){
TweenMax.fromTo(new_slide_desc, 1, {autoAlpha : 0, y:'-100'}, {autoAlpha : 1, y:'0'});
}
if(_getField('type') === 'video'){
//if current slide is video with auto-play option
if( _getField('autoplay') ){
//play video
playVideo();
//nothing to do more
return;
}
//or just initialize API
else{
initPlayer(slide_id_pre+current_slide_number);
}
}
if (is_slider_playing){
startMovingToNextSlide();
}
},
beforeAnimation = function(){
if(_getField('type') === 'image' && is_slider_playing){
kenBurnsEffect();
}
//change slide number in counter
slide_count_num.text(current_slide_number +1);
//hide description of slide
var old_slide_desc = all_slides.filter('.prevslide').find('div.slide-caption');
if(old_slide_desc.length){
TweenMax.to(old_slide_desc, 1, {autoAlpha : 0, y:'100'});
}
// Highlight current thumbnail and adjust row position
if (thumb_links){
var thumb_list_w = thumb_list.width(),
position = 0,
current_thumb, temp, slidePx;
//change current thumb class
thumbs.filter('.current-thumb').removeClass('current-thumb');
current_thumb = thumbs.eq(current_slide_number).addClass('current-thumb');
if(!thumbs_busy){
// If thumb can be out of view
if (thumb_list_w > tray_width ){
position = current_thumb.offset().left - tray.offset().left;
if (current_slide_number === 0){
_animateThumbs(0);
}
//thumb out off view on the right
else if (position >= thumb_interval){
temp = current_thumb.nextAll().andSelf().length * thumb_width;
//if there is less slides than width of tray
if(temp <= thumb_interval ){
slidePx = -(current_thumb.position().left - (tray_width - temp));
}
else{
slidePx = -current_thumb.position().left;
}
_animateThumbs(slidePx);
}
//thumb out off view on the left
else if(position < 0){
_animateThumbs(-current_thumb.position().left);
}
}
}
}
},
progressBar = function(stop){
//don't do anything if progress bar is disabled
if (!p_bar_enabled){
return;
}
stop = (typeof stop === 'undefined')? false : stop;
var circle = play_button.find('.circle'),
time = slider_interval_time/1000;
if(stop){
//we don't scale to 0 cause Chrome display some strange artifacts
// after running animation again when scale starts from 0
TweenMax.to(circle, transition_speed, {scale: 0.05, ease: Power2.easeOut});
}
else{
TweenMax.to(circle, time, {scale: 1.25, ease: Power2.easeIn});
}
},
stopProgressBar = function(){
progressBar(1);
},
textsToggle = function(ev){
var toggle = $(this),
elements = toggle.parent().children().not(toggle);
if(toggle.hasClass('open')){
toggle.removeClass('open').text('+');
elements.fadeOut(400, function () {
elements.css({ display : '', opacity: ''} );//clean after animation
});
}
else{
toggle.addClass('open').text('-');
elements.fadeIn();
}
if(typeof ev !== 'undefined'){
ev.stopPropagation();
ev.preventDefault();
}
};
// Make it go!
prepareEnv();
};
$.fn.a13slider = function(options){
return this.each(function(){
a13slider(options);
});
};
})(jQuery);