danielebarchiesi@2
|
1 /*!
|
danielebarchiesi@2
|
2 * jQuery Cycle Lite Plugin
|
danielebarchiesi@2
|
3 * http://malsup.com/jquery/cycle/lite/
|
danielebarchiesi@2
|
4 * Copyright (c) 2008-2012 M. Alsup
|
danielebarchiesi@2
|
5 * Version: 1.7 (20-FEB-2013)
|
danielebarchiesi@2
|
6 * Dual licensed under the MIT and GPL licenses:
|
danielebarchiesi@2
|
7 * http://www.opensource.org/licenses/mit-license.php
|
danielebarchiesi@2
|
8 * http://www.gnu.org/licenses/gpl.html
|
danielebarchiesi@2
|
9 * Requires: jQuery v1.3.2 or later
|
danielebarchiesi@2
|
10 */
|
danielebarchiesi@2
|
11 ;(function($) {
|
danielebarchiesi@2
|
12 "use strict";
|
danielebarchiesi@2
|
13
|
danielebarchiesi@2
|
14 var ver = 'Lite-1.7';
|
danielebarchiesi@2
|
15 var msie = /MSIE/.test(navigator.userAgent);
|
danielebarchiesi@2
|
16
|
danielebarchiesi@2
|
17 $.fn.cycle = function(options) {
|
danielebarchiesi@2
|
18 return this.each(function() {
|
danielebarchiesi@2
|
19 options = options || {};
|
danielebarchiesi@2
|
20
|
danielebarchiesi@2
|
21 if (this.cycleTimeout)
|
danielebarchiesi@2
|
22 clearTimeout(this.cycleTimeout);
|
danielebarchiesi@2
|
23
|
danielebarchiesi@2
|
24 this.cycleTimeout = 0;
|
danielebarchiesi@2
|
25 this.cyclePause = 0;
|
danielebarchiesi@2
|
26
|
danielebarchiesi@2
|
27 var $cont = $(this);
|
danielebarchiesi@2
|
28 var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
|
danielebarchiesi@2
|
29 var els = $slides.get();
|
danielebarchiesi@2
|
30 if (els.length < 2) {
|
danielebarchiesi@2
|
31 if (window.console)
|
danielebarchiesi@2
|
32 console.log('terminating; too few slides: ' + els.length);
|
danielebarchiesi@2
|
33 return; // don't bother
|
danielebarchiesi@2
|
34 }
|
danielebarchiesi@2
|
35
|
danielebarchiesi@2
|
36 // support metadata plugin (v1.0 and v2.0)
|
danielebarchiesi@2
|
37 var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
|
danielebarchiesi@2
|
38 var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
|
danielebarchiesi@2
|
39 if (meta)
|
danielebarchiesi@2
|
40 opts = $.extend(opts, meta);
|
danielebarchiesi@2
|
41
|
danielebarchiesi@2
|
42 opts.before = opts.before ? [opts.before] : [];
|
danielebarchiesi@2
|
43 opts.after = opts.after ? [opts.after] : [];
|
danielebarchiesi@2
|
44 opts.after.unshift(function(){ opts.busy=0; });
|
danielebarchiesi@2
|
45
|
danielebarchiesi@2
|
46 // allow shorthand overrides of width, height and timeout
|
danielebarchiesi@2
|
47 var cls = this.className;
|
danielebarchiesi@2
|
48 opts.width = parseInt((cls.match(/w:(\d+)/)||[])[1], 10) || opts.width;
|
danielebarchiesi@2
|
49 opts.height = parseInt((cls.match(/h:(\d+)/)||[])[1], 10) || opts.height;
|
danielebarchiesi@2
|
50 opts.timeout = parseInt((cls.match(/t:(\d+)/)||[])[1], 10) || opts.timeout;
|
danielebarchiesi@2
|
51
|
danielebarchiesi@2
|
52 if ($cont.css('position') == 'static')
|
danielebarchiesi@2
|
53 $cont.css('position', 'relative');
|
danielebarchiesi@2
|
54 if (opts.width)
|
danielebarchiesi@2
|
55 $cont.width(opts.width);
|
danielebarchiesi@2
|
56 if (opts.height && opts.height != 'auto')
|
danielebarchiesi@2
|
57 $cont.height(opts.height);
|
danielebarchiesi@2
|
58
|
danielebarchiesi@2
|
59 var first = 0;
|
danielebarchiesi@2
|
60 $slides.css({position: 'absolute', top:0}).each(function(i) {
|
danielebarchiesi@2
|
61 $(this).css('z-index', els.length-i);
|
danielebarchiesi@2
|
62 });
|
danielebarchiesi@2
|
63
|
danielebarchiesi@2
|
64 $(els[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case
|
danielebarchiesi@2
|
65 if (msie)
|
danielebarchiesi@2
|
66 els[first].style.removeAttribute('filter');
|
danielebarchiesi@2
|
67
|
danielebarchiesi@2
|
68 if (opts.fit && opts.width)
|
danielebarchiesi@2
|
69 $slides.width(opts.width);
|
danielebarchiesi@2
|
70 if (opts.fit && opts.height && opts.height != 'auto')
|
danielebarchiesi@2
|
71 $slides.height(opts.height);
|
danielebarchiesi@2
|
72 if (opts.pause)
|
danielebarchiesi@2
|
73 $cont.hover(function(){this.cyclePause=1;}, function(){this.cyclePause=0;});
|
danielebarchiesi@2
|
74
|
danielebarchiesi@2
|
75 var txFn = $.fn.cycle.transitions[opts.fx];
|
danielebarchiesi@2
|
76 if (txFn)
|
danielebarchiesi@2
|
77 txFn($cont, $slides, opts);
|
danielebarchiesi@2
|
78
|
danielebarchiesi@2
|
79 $slides.each(function() {
|
danielebarchiesi@2
|
80 var $el = $(this);
|
danielebarchiesi@2
|
81 this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
|
danielebarchiesi@2
|
82 this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
|
danielebarchiesi@2
|
83 });
|
danielebarchiesi@2
|
84
|
danielebarchiesi@2
|
85 if (opts.cssFirst)
|
danielebarchiesi@2
|
86 $($slides[first]).css(opts.cssFirst);
|
danielebarchiesi@2
|
87
|
danielebarchiesi@2
|
88 if (opts.timeout) {
|
danielebarchiesi@2
|
89 // ensure that timeout and speed settings are sane
|
danielebarchiesi@2
|
90 if (opts.speed.constructor == String)
|
danielebarchiesi@2
|
91 opts.speed = {slow: 600, fast: 200}[opts.speed] || 400;
|
danielebarchiesi@2
|
92 if (!opts.sync)
|
danielebarchiesi@2
|
93 opts.speed = opts.speed / 2;
|
danielebarchiesi@2
|
94 while((opts.timeout - opts.speed) < 250)
|
danielebarchiesi@2
|
95 opts.timeout += opts.speed;
|
danielebarchiesi@2
|
96 }
|
danielebarchiesi@2
|
97 opts.speedIn = opts.speed;
|
danielebarchiesi@2
|
98 opts.speedOut = opts.speed;
|
danielebarchiesi@2
|
99
|
danielebarchiesi@2
|
100 opts.slideCount = els.length;
|
danielebarchiesi@2
|
101 opts.currSlide = first;
|
danielebarchiesi@2
|
102 opts.nextSlide = 1;
|
danielebarchiesi@2
|
103
|
danielebarchiesi@2
|
104 // fire artificial events
|
danielebarchiesi@2
|
105 var e0 = $slides[first];
|
danielebarchiesi@2
|
106 if (opts.before.length)
|
danielebarchiesi@2
|
107 opts.before[0].apply(e0, [e0, e0, opts, true]);
|
danielebarchiesi@2
|
108 if (opts.after.length > 1)
|
danielebarchiesi@2
|
109 opts.after[1].apply(e0, [e0, e0, opts, true]);
|
danielebarchiesi@2
|
110
|
danielebarchiesi@2
|
111 if (opts.click && !opts.next)
|
danielebarchiesi@2
|
112 opts.next = opts.click;
|
danielebarchiesi@2
|
113 if (opts.next)
|
danielebarchiesi@2
|
114 $(opts.next).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?-1:1);});
|
danielebarchiesi@2
|
115 if (opts.prev)
|
danielebarchiesi@2
|
116 $(opts.prev).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?1:-1);});
|
danielebarchiesi@2
|
117
|
danielebarchiesi@2
|
118 if (opts.timeout)
|
danielebarchiesi@2
|
119 this.cycleTimeout = setTimeout(function() {
|
danielebarchiesi@2
|
120 go(els,opts,0,!opts.rev);
|
danielebarchiesi@2
|
121 }, opts.timeout + (opts.delay||0));
|
danielebarchiesi@2
|
122 });
|
danielebarchiesi@2
|
123 };
|
danielebarchiesi@2
|
124
|
danielebarchiesi@2
|
125 function go(els, opts, manual, fwd) {
|
danielebarchiesi@2
|
126 if (opts.busy)
|
danielebarchiesi@2
|
127 return;
|
danielebarchiesi@2
|
128 var p = els[0].parentNode, curr = els[opts.currSlide], next = els[opts.nextSlide];
|
danielebarchiesi@2
|
129 if (p.cycleTimeout === 0 && !manual)
|
danielebarchiesi@2
|
130 return;
|
danielebarchiesi@2
|
131
|
danielebarchiesi@2
|
132 if (manual || !p.cyclePause) {
|
danielebarchiesi@2
|
133 if (opts.before.length)
|
danielebarchiesi@2
|
134 $.each(opts.before, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
|
danielebarchiesi@2
|
135 var after = function() {
|
danielebarchiesi@2
|
136 if (msie)
|
danielebarchiesi@2
|
137 this.style.removeAttribute('filter');
|
danielebarchiesi@2
|
138 $.each(opts.after, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
|
danielebarchiesi@2
|
139 queueNext(opts);
|
danielebarchiesi@2
|
140 };
|
danielebarchiesi@2
|
141
|
danielebarchiesi@2
|
142 if (opts.nextSlide != opts.currSlide) {
|
danielebarchiesi@2
|
143 opts.busy = 1;
|
danielebarchiesi@2
|
144 $.fn.cycle.custom(curr, next, opts, after);
|
danielebarchiesi@2
|
145 }
|
danielebarchiesi@2
|
146 var roll = (opts.nextSlide + 1) == els.length;
|
danielebarchiesi@2
|
147 opts.nextSlide = roll ? 0 : opts.nextSlide+1;
|
danielebarchiesi@2
|
148 opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
|
danielebarchiesi@2
|
149 } else {
|
danielebarchiesi@2
|
150 queueNext(opts);
|
danielebarchiesi@2
|
151 }
|
danielebarchiesi@2
|
152
|
danielebarchiesi@2
|
153 function queueNext(opts) {
|
danielebarchiesi@2
|
154 if (opts.timeout)
|
danielebarchiesi@2
|
155 p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev); }, opts.timeout);
|
danielebarchiesi@2
|
156 }
|
danielebarchiesi@2
|
157 }
|
danielebarchiesi@2
|
158
|
danielebarchiesi@2
|
159 // advance slide forward or back
|
danielebarchiesi@2
|
160 function advance(els, opts, val) {
|
danielebarchiesi@2
|
161 var p = els[0].parentNode, timeout = p.cycleTimeout;
|
danielebarchiesi@2
|
162 if (timeout) {
|
danielebarchiesi@2
|
163 clearTimeout(timeout);
|
danielebarchiesi@2
|
164 p.cycleTimeout = 0;
|
danielebarchiesi@2
|
165 }
|
danielebarchiesi@2
|
166 opts.nextSlide = opts.currSlide + val;
|
danielebarchiesi@2
|
167 if (opts.nextSlide < 0) {
|
danielebarchiesi@2
|
168 opts.nextSlide = els.length - 1;
|
danielebarchiesi@2
|
169 }
|
danielebarchiesi@2
|
170 else if (opts.nextSlide >= els.length) {
|
danielebarchiesi@2
|
171 opts.nextSlide = 0;
|
danielebarchiesi@2
|
172 }
|
danielebarchiesi@2
|
173 go(els, opts, 1, val>=0);
|
danielebarchiesi@2
|
174 return false;
|
danielebarchiesi@2
|
175 }
|
danielebarchiesi@2
|
176
|
danielebarchiesi@2
|
177 $.fn.cycle.custom = function(curr, next, opts, cb) {
|
danielebarchiesi@2
|
178 var $l = $(curr), $n = $(next);
|
danielebarchiesi@2
|
179 $n.css(opts.cssBefore);
|
danielebarchiesi@2
|
180 var fn = function() {$n.animate(opts.animIn, opts.speedIn, opts.easeIn, cb);};
|
danielebarchiesi@2
|
181 $l.animate(opts.animOut, opts.speedOut, opts.easeOut, function() {
|
danielebarchiesi@2
|
182 $l.css(opts.cssAfter);
|
danielebarchiesi@2
|
183 if (!opts.sync)
|
danielebarchiesi@2
|
184 fn();
|
danielebarchiesi@2
|
185 });
|
danielebarchiesi@2
|
186 if (opts.sync)
|
danielebarchiesi@2
|
187 fn();
|
danielebarchiesi@2
|
188 };
|
danielebarchiesi@2
|
189
|
danielebarchiesi@2
|
190 $.fn.cycle.transitions = {
|
danielebarchiesi@2
|
191 fade: function($cont, $slides, opts) {
|
danielebarchiesi@2
|
192 $slides.not(':eq(0)').hide();
|
danielebarchiesi@2
|
193 opts.cssBefore = { opacity: 0, display: 'block' };
|
danielebarchiesi@2
|
194 opts.cssAfter = { display: 'none' };
|
danielebarchiesi@2
|
195 opts.animOut = { opacity: 0 };
|
danielebarchiesi@2
|
196 opts.animIn = { opacity: 1 };
|
danielebarchiesi@2
|
197 },
|
danielebarchiesi@2
|
198 fadeout: function($cont, $slides, opts) {
|
danielebarchiesi@2
|
199 opts.before.push(function(curr,next,opts,fwd) {
|
danielebarchiesi@2
|
200 $(curr).css('zIndex',opts.slideCount + (fwd === true ? 1 : 0));
|
danielebarchiesi@2
|
201 $(next).css('zIndex',opts.slideCount + (fwd === true ? 0 : 1));
|
danielebarchiesi@2
|
202 });
|
danielebarchiesi@2
|
203 $slides.not(':eq(0)').hide();
|
danielebarchiesi@2
|
204 opts.cssBefore = { opacity: 1, display: 'block', zIndex: 1 };
|
danielebarchiesi@2
|
205 opts.cssAfter = { display: 'none', zIndex: 0 };
|
danielebarchiesi@2
|
206 opts.animOut = { opacity: 0 };
|
danielebarchiesi@2
|
207 opts.animIn = { opacity: 1 };
|
danielebarchiesi@2
|
208 }
|
danielebarchiesi@2
|
209 };
|
danielebarchiesi@2
|
210
|
danielebarchiesi@2
|
211 $.fn.cycle.ver = function() { return ver; };
|
danielebarchiesi@2
|
212
|
danielebarchiesi@2
|
213 // @see: http://malsup.com/jquery/cycle/lite/
|
danielebarchiesi@2
|
214 $.fn.cycle.defaults = {
|
danielebarchiesi@2
|
215 animIn: {},
|
danielebarchiesi@2
|
216 animOut: {},
|
danielebarchiesi@2
|
217 fx: 'fade',
|
danielebarchiesi@2
|
218 after: null,
|
danielebarchiesi@2
|
219 before: null,
|
danielebarchiesi@2
|
220 cssBefore: {},
|
danielebarchiesi@2
|
221 cssAfter: {},
|
danielebarchiesi@2
|
222 delay: 0,
|
danielebarchiesi@2
|
223 fit: 0,
|
danielebarchiesi@2
|
224 height: 'auto',
|
danielebarchiesi@2
|
225 metaAttr: 'cycle',
|
danielebarchiesi@2
|
226 next: null,
|
danielebarchiesi@2
|
227 pause: false,
|
danielebarchiesi@2
|
228 prev: null,
|
danielebarchiesi@2
|
229 speed: 1000,
|
danielebarchiesi@2
|
230 slideExpr: null,
|
danielebarchiesi@2
|
231 sync: true,
|
danielebarchiesi@2
|
232 timeout: 4000
|
danielebarchiesi@2
|
233 };
|
danielebarchiesi@2
|
234
|
danielebarchiesi@2
|
235 })(jQuery);
|