/*----------------------------- fade_carousel -----------------------------*/
(function($){
var
defaults = {
activeIndex:0,
autoExecute:false,
timeAutoExecute:3000,
pagerShow:true,
navigatorShow:true,
navigatorInner:[
'prev',
'next'
],
speedFadeIn:500,
speedAnimationHeight:500,
classNameContentsParent:'fade_carousel_contents_parent',
classNameList:'fade_carousel_list',
classNameContents:'fade_carousel_contents',
classNameTriggerPrev:'fade_carousel_trigger_prev',
classNameTriggerNext:'fade_carousel_trigger_next',
funcSetFinishCallback:function(
activeIndex,
ele
){},
funcFadeInStartCallback:function(
prevIndex,
nextIndex,
ele
){},
funcFadeInEndCallback:function(
prevIndex,
nextIndex,
ele
){}
};
$.fn.fadeCarousel = function(options){
var
configs = {},
el = this,
lenEl = el.length,
nextIndex = 0,
flagFuncExecute =
flagTouchExecute = true,
flagPutPager = false,
timeAutoExecute = null,
funcInit = function(){
configs = $.extend({}, defaults, options);
var
eleFadeCarouselUnorderedList = $('.' + configs.classNameList, el),
eleFadeCarouselContentsParent = $('.' + configs.classNameContentsParent + ':eq(0)', el);
if(configs.navigatorShow)
funcPutNavigator();
if(configs.pagerShow){
if(!eleFadeCarouselUnorderedList[0])
funcPutPager();
$(eleFadeCarouselUnorderedList).show();
}else{
$(eleFadeCarouselUnorderedList).hide();
}
funcImgLoad(eleFadeCarouselContentsParent, function(){
var
eleFadeCarouselContents = $('> .' + configs.classNameContents, eleFadeCarouselContentsParent),
eleFadeCarouselContentsActive = eleFadeCarouselContents.eq(configs.activeIndex);
eleFadeCarouselContentsActive
.css({
'z-index':'2'
});
funcAdjustmentHeight(function(){
var
eleFadeCarouselUnorderedList = $('.' + configs.classNameList, el);
if(configs.navigatorShow){
var
eleFadeCarouselTriggerPrev = $('.' + configs.classNameTriggerPrev, el),
eleFadeCarouselTriggerNext = $('.' + configs.classNameTriggerNext, el);
eleFadeCarouselTriggerPrev
.on({
'click':function(){
funcExecute(configs.activeIndex === 0?eleFadeCarouselContents.length - 1:configs.activeIndex -1);
}
});
eleFadeCarouselTriggerNext
.on({
'click':function(){
funcExecute(configs.activeIndex === eleFadeCarouselContents.length - 1?0:configs.activeIndex + 1);
}
});
}
if(eleFadeCarouselUnorderedList[0]){
var
eleFadeCarouselList = $(' > li', eleFadeCarouselUnorderedList);
eleFadeCarouselList.eq(configs.activeIndex).addClass('fade_carousel_active');
eleFadeCarouselList.each(function(index){
$(' > *', this)
.on({
'click':function(){
funcExecute(index);
}
});
});
}
$(window).on({
'resize.fadeCarousel':function(){
funcAdjustmentHeight();
}
});
var
posTouch,
executeRange = 70;
eleFadeCarouselContentsParent
.on({
'mousedown':function(e){
e.preventDefault();
if(flagTouchExecute === false)
return;
flagTouchExecute = false;
posTouch = e.clientX;
},
'mousemove':function(e){
e.preventDefault();
},
'mouseup':function(e){
e.preventDefault();
if(
flagTouchExecute ||
typeof posTouch !== 'number'
)
return;
movePos = posTouch - e.clientX;
if(
movePos < 0 &&
movePos < executeRange * -1
){
var
nextIndex = configs.activeIndex + 1;
posTouch = void 0;
funcExecute(nextIndex === eleFadeCarouselContents.length?0:nextIndex);
setTimeout(function(){
flagTouchExecute = true;
}, 50);
return ;
}else
if(
movePos > 0 &&
movePos > executeRange
){
var
prevIndex = configs.activeIndex - 1;
posTouch = void 0;
funcExecute(prevIndex < 0?eleFadeCarouselContents.length - 1:prevIndex);
setTimeout(function(){
flagTouchExecute = true;
}, 50);
return ;
}
flagTouchExecute = true;
},
'click':function(){
if(flagTouchExecute === false)
return false;
},
'touchstart':function(e){
if(flagTouchExecute === false)
return;
flagTouchExecute = false;
posTouch = e.originalEvent.changedTouches[0].clientX;
},
'touchend':function(e){
if(
flagTouchExecute ||
typeof posTouch !== 'number'
)
return;
movePos = posTouch - e.originalEvent.changedTouches[0].clientX;
if(
movePos < 0 &&
movePos < executeRange * -1
){
var
nextIndex = configs.activeIndex + 1;
posTouch = void 0;
funcExecute(nextIndex === eleFadeCarouselContents.length?0:nextIndex);
setTimeout(function(){
flagTouchExecute = true;
}, 50);
return ;
}else
if(
movePos > 0 &&
movePos > executeRange
){
var
prevIndex = configs.activeIndex - 1;
posTouch = void 0;
funcExecute(prevIndex < 0?eleFadeCarouselContents.length - 1:prevIndex);
setTimeout(function(){
flagTouchExecute = true;
}, 50);
return ;
}
flagTouchExecute = true;
}
});
if(configs.autoExecute)
funcSetAutoExecute();
funcCustomEvents();
funcDestructor();
configs.funcSetFinishCallback(
configs.activeIndex,
el
);
});
});
},
funcDestructor = function(){
lenEl = void 0;
},
funcCustomEvents = function(){
el.on({
'fadeCarousel.funcFadeCarouselExecute':function(e, index){
funcExecute(index);
e.stopPropagation();
},
'fadeCarousel.funcFadeCarouselAdjustmentHeight':function(e, callback){
if(flagFuncExecute === false)
return false;
funcAdjustmentHeight(callback);
e.stopPropagation();
},
'fadeCarousel.funcFadeCarouselDestroy':function(e){
if(
configs.autoExecute &&
typeof timeAutoExecute === 'number'
){
clearTimeout(timeAutoExecute);
timeAutoExecute = void 0;
}
var
eleFadeCarouselContentsParent = $('.' + configs.classNameContentsParent + ':eq(0)', el),
eleFadeCarouselContents = $('> .' + configs.classNameContents, eleFadeCarouselContentsParent),
eleFadeCarouselContentsActiveNext = eleFadeCarouselContents.eq(nextIndex),
eleFadeCarouselList = $('.' + configs.classNameList, el);
if(eleFadeCarouselList[0]){
if(flagPutPager){
eleFadeCarouselList.remove();
flagPutPager = false;
}else
if(configs.pagerShow){
var
eleFadeCarouselList = $('> li', eleFadeCarouselList);
eleFadeCarouselList.eq(configs.activeIndex).removeClass('fade_carousel_active');
eleFadeCarouselList.each(function(){
$('> span', this).off('click');
});
}
}
$(window).off('resize.fadeCarousel');
eleFadeCarouselContentsParent
.stop()
.off('mousedown mousemove mouseup click touchstart touchend');
el.off('fadeCarousel.funcFadeCarouselExecute fadeCarousel.funcFadeCarouselAdjustmentHeight fadeCarousel.funcFadeCarouselReset');
eleFadeCarouselContentsActiveNext
.stop()
.css('opacity', 'unset');
eleFadeCarouselContents
.css('z-index', 'unset');
e.stopPropagation();
}
});
},
funcImgLoad = function(ele, callback){
var
count = 0,
eleImg = ele.find('img'),
lenImg = $(eleImg).length;
if(lenImg === 0)
callback();
$(eleImg).each(function(){
var
eleImg = $('');
eleImg.on({
'load':function(){
count++;
if(lenImg === count)
callback();
},
'error':function(){
count++;
if(lenImg === count)
callback();
}
});
eleImg.attr('src', $(this).attr('src'));
});
},
funcAdjustmentHeight = function(callback){
var
eleFadeCarouselContentsParent = $('.' + configs.classNameContentsParent + ':eq(0)', el),
eleFadeCarouselContentsCurrent = $('> .' + configs.classNameContents, eleFadeCarouselContentsParent).eq(configs.activeIndex);
eleFadeCarouselContentsParent
.stop()
.animate(
{
'height':eleFadeCarouselContentsCurrent.outerHeight(true) + 'px'
},
configs.speedAnimationHeight,
function(){
if(typeof callback === 'function')
callback(configs.activeIndex);
}
);
},
funcSetAutoExecute = function(){
var
eleFadeCarouselContentsParent = $('.' + configs.classNameContentsParent + ':eq(0)', el),
eleFadeCarouselContents = $('> .' + configs.classNameContents, eleFadeCarouselContentsParent);
timeAutoExecute = setTimeout(function(){
var
nextIndex = configs.activeIndex + 1;
funcExecute(nextIndex === eleFadeCarouselContents.length?0:nextIndex);
}, configs.timeAutoExecute + configs.speedFadeIn);
},
funcPutPager = function(){
el.append('