clipbucket/upload/styles/cb_28/theme/js/uslider_js/jquery.ulslide.js

1224 lines
50 KiB
JavaScript
Raw Normal View History

/**
* Slider (or carousel) that supports "Slide", "Crossfade", "Fade",
* "HTML5 Rotate", "HTML5 Scale" and "Carousel" effects. Flexible, secure
* for html layout (do not changes structure of HTML) and very simple to use.
*
* The plugin supports Responsive design, images Preloading, Lazy Load and Ajax.
* Any HTML can be used as slide content (not only images).
*
* If the Mousewheel plugin has been included on the page then
* the slider will also respond to the mouse wheel. (Set "mousewheel" option as "true")
*
* @name jQuery ulSlide plugin
* @license GPL
* @version 1.5.5
* @date Dec 02th, 2013
* @category jQuery plugin
* @author Yevhen Kotelnytskyi (evgennniy@gmail.com)
* @copyright (c) 2011 - 2013 Yevhen Kotelnytskyi (http://4coder.info/en/)
* @example Visit http://4coder.info/en/code/jquery-plugins/ulslide/ for more informations about this jQuery plugin
*/
(function($) {
// --- CSS Hook "uslTransformRotateY" and "uslTransformTranslateZ"
function setUslTransform(elem) {
var uslTransformRotateY = $.data( elem, 'uslTransformRotateY' );
var uslTransformTranslateZ = $.data( elem, 'uslTransformTranslateZ' );
var transform = '';
if (uslTransformRotateY !== undefined)
transform += ' rotateY('+uslTransformRotateY+'deg) ';
if (uslTransformTranslateZ !== undefined)
transform += ' translateZ('+uslTransformTranslateZ+'px) ';
$(elem).css({
'-webkit-transform': transform,
'transform': transform
});
}
$.cssHooks.uslTransformRotateY = {
set: function(elem, val, unit) {
$.data( elem, 'uslTransformRotateY', parseInt(val) );
setUslTransform(elem);
},
get: function(elem, computed) {
var uslTransformRotateY = $.data( elem, 'uslTransformRotateY' );
var val = uslTransformRotateY ? uslTransformRotateY : 0;
return val;
}
};
$.cssHooks.uslTransformTranslateZ = {
set: function(elem, val, unit) {
$.data( elem, 'uslTransformTranslateZ', parseInt(val) );
setUslTransform(elem);
},
get: function(elem, computed) {
var uslTransformTranslateZ = $.data( elem, 'uslTransformTranslateZ' );
var val = uslTransformTranslateZ ? uslTransformTranslateZ : 0;
return val;
}
};
$.fx.step.uslTransformRotateY = function( fx ) {
$.cssHooks.uslTransformRotateY.set( fx.elem, fx.now, fx.unit);
};
$.fx.step.uslTransformTranslateZ = function( fx ) {
$.cssHooks.uslTransformTranslateZ.set( fx.elem, fx.now, fx.unit);
};
// --- end CSS Hook ---
// --- Effects ---
ulslideEffects = {
//-------------------------------------------------------------------------------
flip3D: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.flip3D.init();'); //***
$elem.css({
'overflow': 'visible',
'transformStyle': 'preserve-3d'
});
$('> *', $elem[0]).each(function(i) {
var styles = {
'uslTransformRotateY': '0deg',
'transformStyle': 'preserve-3d',
'backface-visibility': 'hidden',
'-webkit-backface-visibility': 'hidden',
'top': '50%',
'left': '50%'
};
if (i == settings['current'])
styles.display = 'block';
else styles.display = 'none';
$(this).css(styles);
});
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.flip3D.resize();'); //***
$elem.css({
'perspective': settings['perspective'] + 'px',
});
$('> *', $elem[0]).each(function(i) {
var styles = {
'margin': ('-' + (settings['height']/2) + 'px 0 0' + '-' + (settings['width']/2) + 'px')
};
$(this).css(styles);
});
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.flip3D.slide();'); //***
if (settings['direction'] == 'f') {
var degs = {
prev_start: '0deg',
prev_finish: 180,
current_start: '180deg',
current_finish: 360
};
}
else {
var degs = {
prev_start: '360deg',
prev_finish: 180,
current_start: '180deg',
current_finish: 0
};
}
$prevElem.css({
uslTransformRotateY: degs.prev_start,
opacity: 1,
display: 'block'
});
$currentElem.css({
uslTransformRotateY: degs.current_start,
opacity: 1,
display: 'block'
});
$prevElem.animate({
'uslTransformRotateY': degs.prev_finish,
'opacity': 0
},{
duration: settings['duration'],
easing: settings['easing']
});
$currentElem.animate({
'uslTransformRotateY': degs.current_finish,
'opacity': 1
},{
duration: settings['duration'],
easing: settings['easing'],
complete: function(){
callback();
}
});
}
},
//-------------------------------------------------------------------------------
cube3D: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.cube3D.init();'); //***
$elem.css({
'transformStyle': 'preserve-3d',
'overflow': 'visible'
});
$('> *', $elem[0]).each(function(i) {
var styles = {
'uslTransformRotateY': '0deg',
'transformStyle': 'preserve-3d',
'backface-visibility': 'hidden',
'-webkit-backface-visibility': 'hidden',
'top': '50%',
'left': '50%'
};
if (i == settings['current'])
styles.display = 'block';
else styles.display = 'none';
$(this).css(styles);
});
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.cube3D.resize();'); //***
var scale = (settings['perspective'] - settings['width'] / 2) / settings['perspective'];
$elem.css({
'perspective': settings['perspective'] + 'px',
'transform': 'scale('+scale+')',
'-webkit-transform': 'scale('+scale+')'
});
$('> *', $elem[0]).each(function(i) {
var styles = {
'uslTransformTranslateZ': (settings['width']/2) + 'px',
'margin': ('-' + (settings['height']/2) + 'px 0 0' + '-' + (settings['width']/2) + 'px')
};
$(this).css(styles);
});
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.cube3D.slide();'); //***
if (settings['direction'] == 'f') {
var degs = {
prev_start: '0deg',
prev_finish: 90,
current_start: '-90deg',
current_finish: 0
};
}
else {
var degs = {
prev_start: '0deg',
prev_finish: -90,
current_start: '90deg',
current_finish: 0
};
}
$prevElem.css({
uslTransformRotateY: degs.prev_start,
display: 'block'
});
$currentElem.css({
uslTransformRotateY: degs.current_start,
display: 'block'
});
$prevElem.animate({
'uslTransformRotateY': degs.prev_finish
},{
duration: settings['duration'],
easing: settings['easing']
});
$currentElem.animate({
'uslTransformRotateY': degs.current_finish
},{
duration: settings['duration'],
easing: settings['easing'],
complete: callback
});
}
},
//-------------------------------------------------------------------------------
slide: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.slide.init();'); //***
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.slide.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.slide.slide();'); //***
var axis = settings['effect']['axis'];
// Randomize axis
if (axis == 'r')
axis = $elem.array_rand(['x', 'y']);
if (axis == 'x') {
if (settings['prev'] != settings['current']){
if (settings['direction'] == 'f'){
$prevElem.animate({
'left': -(settings['width'] + settings['effect']['distance'])
}, settings['duration'], settings['easing']);
$currentElem.css('left', settings['width'] + settings['effect']['distance']);
}
else{
$prevElem.animate({
'left': settings['width'] + settings['effect']['distance']
}, settings['duration'], settings['easing']);
$currentElem.css('left', -(settings['width'] + settings['effect']['distance']));
}
}
$currentElem.css('top', 0);
$prevElem.css('top', 0);
$currentElem.animate({
'left': 0
}, settings['duration'], settings['easing'], callback
);
}
else {
if (settings['prev'] != settings['current']) {
if (settings['direction'] == 'f') {
$prevElem.animate({
'top': $elem[0].currentHeight + settings['effect']['distance']
}, settings['duration'], settings['easing'], function() {
$prevElem.css('left', -(settings['width'] + settings['effect']['distance']));
});
$currentElem.css('top', -(settings['prevHeight'] + settings['effect']['distance']));
}
else {
$prevElem.animate({
'top': -($elem[0].currentHeight + settings['effect']['distance'])
}, settings['duration'], settings['easing'], function(){
$prevElem.css('left', -(settings['width'] + settings['effect']['distance']));
});
$currentElem.css('top', settings['prevHeight'] + settings['effect']['distance']);
}
}
$currentElem.css('left', 0);
$prevElem.css('left', 0);
$currentElem.animate({ 'top': 0 },
settings['duration'],
settings['easing'],
callback);
}
}
},
//-------------------------------------------------------------------------------
fade: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.fade.init();'); //***
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.fade.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.fade.slide();'); //***
$currentElem.css('display', 'none');
$currentElem.css('left', 0);
$currentElem.css('top', 0);
$prevElem.fadeOut(settings['duration'], function(){
$prevElem.css('display', 'none');
$currentElem.fadeIn(settings['duration'], callback);
});
}
},
//-------------------------------------------------------------------------------
crossfade: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.crossfade.init();'); //***
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.crossfade.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.crossfade.slide();'); //***
$currentElem.css('display', 'none');
$currentElem.css('left', 0);
$currentElem.css('top', 0);
$prevElem.fadeOut(settings['duration'], function(){
$prevElem.css('display', 'none');
});
$currentElem.fadeIn(settings['duration'], callback);
}
},
//-------------------------------------------------------------------------------
rotate: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.rotate.init();'); //***
$elem.css('overflow', 'visible');
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.rotate.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.rotate.slide();'); //***
var rotate_pref = settings['direction'] == 'f' ? '-' : '';
$currentElem.animate({
'rotate': rotate_pref + '90deg',
'scale': '0.01',
'opacity': 0.3,
'z-index': 2,
'left': 0,
'top': 0
}, 0);
$prevElem.css('z-index', 1);
$prevElem.animate({
'opacity': 0
},
settings['duration'],
settings['easing']);
$currentElem.animate({
'rotate': rotate_pref + '360deg',
'scale': '1',
'opacity': 1
},
settings['duration'],
settings['easing'],
callback);
}
},
//-------------------------------------------------------------------------------
scale: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.scale.init();'); //***
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.scale.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.scale.slide();'); //***
if (settings['direction'] == 'f') {
var rotate_pref = '-';
var rotate_pref_i = '';
}
else {
var rotate_pref = '';
var rotate_pref_i = '-';
}
$currentElem.animate({
'scale': '0.05',
'opacity': 0.3,
'z-index': 2,
'left': 0,
'top': 0,
'marginLeft': rotate_pref_i + (settings['fwidth']/2)+'px'
}, 0);
$prevElem.css('z-index', 1);
$prevElem.animate({
'scale': '0.01',
'opacity': 0,
'marginLeft': rotate_pref + (settings['fwidth']/2)+'px'
},
settings['duration'],
settings['easing']);
$currentElem.animate({
'scale': '1',
'opacity': 1,
'marginLeft': '0px'
},
settings['duration'],
settings['easing'],
callback);
}
},
//-------------------------------------------------------------------------------
carousel: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.carousel.init();'); //***
$('> *', $elem[0]).each(function(i) {
var ci = $elem.carouselGetFramePos(i, settings['current']);
if (settings['effect']['axis'] == 'y') {
$(this).css({
'top': (ci * settings['fheight']),
'left': '0'
});
}
else {
$(this).css({
'top': '0',
'left': (ci * settings['fwidth'])
});
}
});
if (settings['effect']['axis'] == 'y') {
$elem.css('width', settings['width']);
$elem.css('height', settings['fheight'] * settings['effect']['showCount'] - settings['effect']['distance']);
}
else {
$elem.css('width', settings['fwidth'] * settings['effect']['showCount'] - settings['effect']['distance']);
$elem.css('height', settings['height']);
}
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.carousel.resize();'); //***
if (settings['effect']['axis'] == 'y') {
$elem.css('width', settings['width']);
$elem.css('height', settings['fheight'] * settings['effect']['showCount'] - settings['effect']['distance']);
}
else {
$elem.css('width', settings['fwidth'] * settings['effect']['showCount'] - settings['effect']['distance']);
$elem.css('height', settings['height']);
}
$('> *', $elem[0]).each(function(i) {
var ci = $elem.carouselGetFramePos(i, settings['current']);
if (settings['effect']['axis'] == 'y') {
$(this).css({
'top': (ci * settings['fheight']),
'left': '0'
});
}
else {
$(this).css({
'top': '0',
'left': (ci * settings['fwidth'])
});
}
});
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.carousel.slide();'); //***
$('> *', $elem[0]).each(function(i){
liel = $(this);
var ci = $elem.carouselGetFramePos(i, settings['current']);
if (settings['direction'] == 'f')
var pi = $elem.carouselGetFramePos(i, settings['current'] - 1);
else var pi = $elem.carouselGetFramePos(i, settings['current'] + 1);
if (settings['effect']['axis'] == 'y') {
if ((settings['direction'] == 'f') && (ci == 0)) {
liel.css('top', (-1 * settings['fheight']));
liel.animate({'top': ci * settings['fheight']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'f') && (pi + 1 == settings['effect']['showCount'])) {
liel.animate({'top': (settings['effect']['showCount']) * settings['fheight']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'b') && (pi == 0)) {
liel.animate({'top': -1 * settings['fheight']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'b') && (ci + 1 == settings['effect']['showCount'])) {
liel.css('top', (ci + 1) * settings['fheight']);
liel.animate({'top': ci * settings['fheight']}, settings['duration'], settings['easing']);
}
else {
if ((ci < settings['effect']['showCount']) && (ci >= 0)) {
liel.animate({'top': ci * settings['fheight']}, settings['duration'], settings['easing']);
}
else {
liel.css('top', (ci * settings['fheight']));
}
}
}
else {
if ((settings['direction'] == 'f') && (ci == 0)) {
liel.css('left', (-1 * settings['fwidth']));
liel.animate({'left': ci * settings['fwidth']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'f') && (pi + 1 == settings['effect']['showCount'])) {
liel.animate({'left': (settings['effect']['showCount']) * settings['fwidth']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'b') && (pi == 0)) {
liel.animate({'left': -1 * settings['fwidth']}, settings['duration'], settings['easing']);
}
else if ((settings['direction'] == 'b') && (ci + 1 == settings['effect']['showCount'])) {
liel.css('left', (ci + 1) * settings['fwidth']);
liel.animate({'left': ci * settings['fwidth']}, settings['duration'], settings['easing']);
}
else {
if ((ci < settings['effect']['showCount']) && (ci >= 0)) {
liel.animate({'left': ci * settings['fwidth']}, settings['duration'], settings['easing']);
}
else {
liel.css('left', (ci * settings['fwidth']));
}
}
}
setTimeout(callback, settings['duration'] + 100);
});
}
},
//-------------------------------------------------------------------------------
test: {
init: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.test.init();'); //***
},
resize: function($elem, settings) {
if (settings['debug'])
console.log('ulslideEffects.test.resize();'); //***
},
slide: function($elem, settings, $prevElem, $currentElem, callback) {
if (settings['debug'])
console.log('ulslideEffects.test.slide();'); //***
}
}
//-------------------------------------------------------------------------------
};
// --- end Effects ---
// --- jQuery plugin ---
$.fn.ulslide = function(settings) {
var thisObj = this;
if (thisObj.length == 0) return false;
var thisEl = thisObj[0];
if (! $(thisEl).attr('id')) {
if (ulslide_last_id == undefined)
ulslide_last_id = 0;
ulslide_last_id ++;
$(thisEl).attr('id', 'ulslide-' + ulslide_last_id);
}
var id = $(thisEl).attr('id');
// Settings
settings = $.extend({
effect: {
type: 'slide', // slide, fade, crossfade, flip3D, cube3D or carousel (use showCount for carousel)
axis: 'x', // x, y, r (r - random)
// distance: 20 // Distance between frames
distance: -2 // Distance between frames
},
perspective: 1000, // Perspective for 3D effects
duration: 600, // Changing duration
direction: 'f', // f, b
autoslide: false, // Autoscrolling interval (ms)
current: 0,
canResize: false,
width: thisObj.width(),
height: 'auto', // pixels or 'auto'
statusbar: true,
loader: '',
loadClass: 'usl-loading',
loadTimeout: 5000, // images loading timeout
lazyload: false, // testing
ajax: false,
mousewheel: false, // Scroll on "mousewheel"
// Selectors:
pager: false,
nextButton: false,
prevButton: false,
printCurrentTo: false,
//framesOnPage: 2,
onAnimateStart: function(settings, thisEl){},
onAnimate: function(settings, thisEl){},
onAjaxStart: function(settings, thisEl){},
onAjaxStop: function(settings, thisEl){},
beforeResize: function(settings, thisEl){},
onResize: function(settings, thisEl){},
debug: false
},settings);
// Deprecated Options
if (typeof settings['affect'] != 'undefined') settings['effect']['type'] = settings['affect'];
if (typeof settings['axis'] != 'undefined') settings['effect']['axis'] = settings['axis'];
if (typeof settings['padding'] != 'undefined') settings['effect']['distance'] = settings['padding'];
if (typeof settings['navigator'] != 'undefined') settings['pager'] = settings['navigator'];
if (typeof settings['print_current'] != 'undefined') settings['printCurrentTo'] = settings['print_current'];
if (typeof settings['bnext'] != 'undefined') settings['nextButton'] = settings['bnext'];
if (typeof settings['bprev'] != 'undefined') settings['prevButton'] = settings['bprev'];
// end Deprecated Options
if (settings['canResize'] && settings['height'] == 'auto')
settings['height'] = thisObj.height();
if (typeof settings['effect']['distance'] == 'undefined')
// settings['effect']['distance'] = 20;
settings['effect']['distance'] = -2;
settings['fwidth'] = settings['width'] + settings['effect']['distance'];
settings['fheight'] = settings['height'] + settings['effect']['distance'];
settings['prev'] = settings['current'];
settings['count'] = $('> *', thisObj).length;
if (settings['lazyload']) {
$('img', thisObj).each(function(i){
var img = $(this);
img.attr('rel', img.attr('src'));
if (i > 0) {
img.removeAttr('src');
}
});
}
thisObj.carouselGetFramePos = function (i, current) {
if (i >= settings['effect']['showCount'] - current) {
var l = settings['count'] - settings['effect']['showCount'];
var ci = (i + current - settings['effect']['showCount']) - l;
return ci;
}
else return i + current;
};
// Initialize elements
$('> *', thisObj).each(function(i){
var liel = $(this);
liel.addClass('slide-node slide-node-'+i);
liel.css({
'position': 'absolute',
'margin': '0',
'width': settings['width'],
'overflow': 'hidden'
});
if (i == settings['current']) {
liel.css({
'top': '0',
'left': '0'
});
}
else {
liel.css({
'top': '0',
'left': -(settings['width'] + settings['effect']['distance'])
});
}
});
// Initialize container
thisObj.css({
'list-style': 'none',
'position': 'relative',
'padding': 0,
'overflow': 'hidden'
});
if (! settings['canResize']) {
thisObj.css('width', settings['width']);
if (settings['height'] == 'auto'){
thisObj.css('height', $('> *:eq('+settings['current']+')', thisObj).height());
}
else thisObj.css('height', settings['height']);
settings['prevHeight'] = settings['height'];
}
// Initialize effect
var effect = ulslideEffects[settings['effect']['type']];
if (effect != undefined) {
effect.init(thisObj, settings);
effect.resize(thisObj, settings);
}
// end Initialize
function resize(){
var size = settings['beforeResize'](settings, thisEl); // event
if (size && size.width && size.height) {
settings['width'] = size.width;
settings['height'] = size.height;
}
else {
settings['width'] = thisObj.width();
settings['height'] = thisObj.height();
}
//console.log('resize ' + settings['width'] + ' x ' + settings['height']); //*****
settings['fwidth'] = settings['width'] + settings['effect']['distance'];
settings['fheight'] = settings['height'] + settings['effect']['distance'];
//thisObj.css('width', settings['width']);
if (settings['height'] == 'auto'){
thisObj.css('height', $('> *:eq('+settings['current']+')', thisObj).height());
console.log('resize auto height: ' + $('> *:eq('+settings['current']+')', thisObj).height()); //*****
}
//else thisObj.css('height', settings['height']);
settings['prevHeight'] = settings['height'];
/* elements */
$('> *', thisObj).each(function(i){
var liel = $(this);
liel.addClass('slide-node slide-node-'+i);
liel.css('position', 'absolute');
liel.css('margin', '0');
liel.css('distance', '0');
liel.css('width', settings['width']);
liel.css('overflow', 'hidden');
if (settings['effect']['type'] != 'carousel') {
if (i == settings['current']){
liel.css('top', '0');
liel.css('left', '0');
}
else{
liel.css('top', '0');
liel.css('left', -(settings['width'] + settings['effect']['distance']));
}
if (settings['height'] == 'auto'){
liel.css('height', $('> *:eq('+settings['current']+')', thisObj).height());
}
else liel.css('height', settings['height']);
}
});
// Resize effect
if (effect != undefined) {
effect.resize(thisObj, settings);
}
// end Resize effect
settings['onResize'](settings, thisEl); // event
}
thisEl.getSlide = function getSlide(num) {
return $('> *:eq('+num+')', thisEl);
};
thisEl.array_rand = function(arg) {
return arg[Math.floor(Math.random() * arg.length)];
};
function next() {
var c = thisEl.uslCurrent();
settings['direction'] = 'f';
if (c + 1 < settings['count']) {
thisEl.uslRefresh(c + 1);
} else {
thisEl.uslRefresh(0);
}
}
function prev() {
var c = thisEl.uslCurrent();
settings['direction'] = 'b';
if (c > 0) {
thisEl.uslRefresh(c - 1);
} else {
thisEl.uslRefresh(settings['count'] - 1);
}
}
if (settings['height'] == 'auto')
thisEl.currentHeight = thisEl.getSlide(settings['current']).height();
else thisEl.currentHeight = settings['height'];
thisEl.uslCurrent = function(new_value){
if (new_value == undefined){
return settings['current'];
}
else {
var old = thisEl.uslCurrent();
var c = new_value;
settings['current'] = new_value;
return new_value;
}
};
thisEl.autoslideNext = function(){
/*if (settings['direction'] == 'f') next();
else prev();*/
next();
};
thisEl.initAutoslide = function(){
if (settings['TimeoutID']) clearTimeout(settings['TimeoutID']);
settings['TimeoutID'] = setTimeout("jQuery('#"+$(thisEl).attr('id')+"')[0].autoslideNext()", settings['autoslide']);
if (settings['debug'])
console.log('initAutoslide: ' + settings['TimeoutID']);
};
thisEl.clearAutoslide = function(){
if (settings['TimeoutID']) {
clearTimeout(settings['TimeoutID']);
}
};
thisEl.uslRefresh = function(slide_index, fast, callback){
if (settings['debug'])
console.log('uslRefresh()');
if (! thisEl.ready) {
if (settings['debug'])
console.log('uslRefresh / ' + settings['id'] + ': ! thisEl.ready');
setTimeout("jQuery('#"+$(thisEl).attr('id')+"')[0].uslRefresh()", 400);
return;
}
if (settings['LoadTimeoutID']) clearTimeout(settings['LoadTimeoutID']);
thisEl.ready = false;
if (typeof(slide_index) != 'undefined') {
thisEl.uslCurrent(slide_index);
}
thisEl.clearAutoslide();
var prev = thisEl.getSlide(settings['prev']);
var current = thisEl.getSlide(settings['current']);
current.css('display', 'block');
function doRefresh() {
if (settings['debug'])
console.log('doRefresh()');
settings['onAnimateStart'](settings, thisEl); // notification
//console.log(settings['id'] + ': doRefresh');
if (settings['height'] == 'auto') {
thisEl.currentHeight = thisEl.getSlide(settings['current']).height();
settings['prevHeight'] = thisEl.getSlide(settings['prev']).height();
}
function finish_animate() {
if (settings['debug'])
console.log('finish_animate(): start');
if (settings['printCurrentTo']) {
$(settings['printCurrentTo']).html(settings['current'] + 1);
}
if ((settings['prev'] != settings['current']) && (settings['effect']['type'] != 'carousel') ) {
prev.css('display', 'none');
}
if (settings['height'] == 'auto') {
thisObj.animate({
'height': thisEl.currentHeight
}, 250/*, function() { alert(settings['id'] + ': finish_animate()' + thisEl.currentHeight); }*/);
}
//settings['prev'] = settings['current'];
if (settings['debug'])
console.log('finish_animate(): autoslide = ' + settings['autoslide']);
if (settings['autoslide']) thisEl.initAutoslide();
settings['onAnimate'](settings, thisEl); // notification
settings['prev'] = settings['current'];
thisEl.uslRefreshClasses();
thisEl.ready = true;
if (typeof callback != 'undefined') callback();
}
if (settings['prev'] == settings['current']) {
finish_animate();
return;
}
// Call effect
if (effect != undefined) {
effect.slide(thisObj, settings, prev, current, finish_animate);
}
}
if (settings['ajax']) {
settings['onAjaxStart'](settings, thisEl); // notification
var statusbar_loaded = thisEl.getSlide(settings['current'])[0].usl_ajax_loaded;
thisEl.uslAjaxLoadSlide(settings['current'], function() {
settings['onAjaxStop'](settings, thisEl); // notification
doRefresh();
})
}
else {
if (settings['lazyload']) {
var $imgToLoad = $('img', current[0]);
$imgToLoad.each(function(i){
var img = $(this);
img.attr('src', img.attr('rel'));
});
settings['z_img_count'] = $imgToLoad.length;
settings['z_img_loaded'] = 0;
$imgToLoad.each(function(){
if (this.complete) {
settings['z_img_loaded'] ++;
}
else {
$(this).load(function(){
settings['z_img_loaded'] ++;
if (settings['z_img_loaded'] == settings['z_img_count']){
doRefresh();
}
});
}
});
if (settings['z_img_loaded'] == settings['z_img_count']){
doRefresh();
}
return;
}
doRefresh();
}
};
thisEl.uslAjaxLoadSlide = function(slide_num, callback) {
var current = thisEl.getSlide(slide_num);
if (current[0].usl_ajax_loaded) {
callback();
}
else {
var url = $(settings['pager']).eq(slide_num).attr('href');
current[0].usl_ajax_loaded = true;
current.load(url + '?ajax=1', false, callback);
}
};
thisEl.uslRefreshClasses = function(){
if (settings['count'] > 1){
if (settings['nextButton']) $(settings['nextButton']).addClass('active');
if (settings['prevButton']) $(settings['prevButton']).addClass('active');
}
if (settings['pager']){
$(settings['pager']).removeClass('usl-current');
$(settings['pager'] + '.usl-pager-'+thisEl.uslCurrent()).addClass('usl-current');
$(settings['pager']).parent().removeClass('usl-current-parent');
$(settings['pager'] + '.usl-pager-'+thisEl.uslCurrent()).parent().addClass('usl-current-parent');
}
};
if (settings['nextButton']){
$(settings['nextButton']).click(function(){
next();
return false;
});
}
if (settings['prevButton']){
$(settings['prevButton']).click(function(){
prev();
return false;
});
}
function setNavigator(s_navigator) {
var pager = $(s_navigator);
pager.each(function(index){
this.usl_navigator_index = index;
$(this).addClass('usl-pager-' + index);
});
pager.click(function(){
var c = this.usl_navigator_index;
if ((c < settings['count']) && (c != thisEl.uslCurrent())) {
//thisEl.uslCurrent(c);
if (c > thisEl.uslCurrent()) settings['direction'] = 'f';
else settings['direction'] = 'b';
thisEl.uslRefresh(c);
}
return false;
});
}
if (settings['pager']){
setNavigator(settings['pager']);
}
if (settings['navigator2']){
setNavigator(settings['navigator2']);
}
function loadingStatus(loading) {
if (loading) {
thisObj.addClass('usl-loading');
thisObj.parent().addClass('usl-parent-loading');
if (settings['loader']) {
jQuery(settings['loader']).addClass(settings['loadClass']);
}
}
else {
thisObj.removeClass('usl-loading');
thisObj.parent().removeClass('usl-parent-loading');
if (settings['loader']) {
jQuery(settings['loader']).removeClass(settings['loadClass']);
}
}
}
thisEl.uslStatusbar = function() {
function isImageLoaded(img) {
if (!img.complete) {
return false;
}
if (typeof img.naturalWidth !== 'undefined' && img.naturalWidth === 0) {
return false;
}
return true;
}
if (settings['lazyload']) {
var $imgToLoad = $('>li:eq('+settings['current']+') img', thisEl);
}
else {
var $imgToLoad = $('img', thisEl);
}
settings['img_count'] = $imgToLoad.length;
if (settings['img_count']) {
loadingStatus(true);
}
settings['img_loaded'] = 0;
$imgToLoad.each(function(){
if (isImageLoaded(this)) {
settings['img_loaded'] ++;
if (settings['debug'])
console.log($(this).attr('src') + ' loaded');
}
else {
$(this).load(function(){
settings['img_loaded'] ++;
if (settings['debug'])
console.log('Img LOAD / ' + settings['img_loaded'] + ' of ' + settings['img_count']);
if (settings['img_loaded'] == settings['img_count']){
loadingStatus(false);
thisEl.ready = true;
thisEl.uslRefresh();
}
});
if (settings['debug'])
console.log($(this).attr('src') + ' NOT loaded');
}
});
if (settings['debug'])
console.log('uslStatusbar() / ' + settings['img_loaded'] + ' of ' + settings['img_count']);
if (settings['img_loaded'] == settings['img_count']){
loadingStatus(false);
thisEl.ready = true;
thisEl.uslRefresh();
}
settings['LoadTimeoutID'] = setTimeout(function(){
loadingStatus(false);
thisEl.ready = true;
thisEl.uslRefresh();
}, settings['loadTimeout']);
};
// statusbar
if (settings['statusbar'] && !settings['ajax']){
thisEl.uslStatusbar();
}
/*
* If the mousewheel plugin has been included on the page then
* the slider will also respond to the mouse wheel.
*/
if (settings['mousewheel']) {
thisObj.bind(
'mousewheel',
function (event, delta) {
if (thisEl.ready) {
if (delta < 0) {
next();
}
else {
prev();
}
}
return false;
});
}
if (settings['canResize']){
thisObj.on('resize', resize);
jQuery(window).on('resize', resize);
resize();
}
if (! settings['statusbar'] || settings['ajax']) {
thisEl.ready = true;
thisEl.uslRefresh();
}
};
})(jQuery);
// --- end jQuery plugin ---