Skip to content

Commit 96ca2fe

Browse files
committed
refining carousel a bit
1 parent 8b2b853 commit 96ca2fe

File tree

1 file changed

+85
-60
lines changed

1 file changed

+85
-60
lines changed

tc.carousel.js

Lines changed: 85 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
(function(window, $) {
2626

2727
var NI = window.NI,
28-
generate,
29-
events;
28+
generate;
3029

3130
generate = {
3231
carousel: function() {
@@ -60,25 +59,8 @@
6059
}
6160
};
6261

63-
events = {
64-
keydown: function(e) {
65-
var key;
66-
key = e.keyCode || e.which;
67-
switch (key) {
68-
case NI.co.keyboard.LEFT:
69-
e.preventDefault();
70-
e.data.instance.prev();
71-
break;
72-
case NI.co.keyboard.RIGHT:
73-
e.preventDefault();
74-
e.data.instance.next();
75-
break;
76-
}
77-
}
78-
};
79-
8062
function Carousel(options) {
81-
var me, o, $c, $elements;
63+
var me, o, $c, $elements, events;
8264

8365
me = this;
8466
o = $.extend({
@@ -139,6 +121,10 @@
139121
me.begin(true);
140122
}
141123

124+
function current() {
125+
return $elements.scroll.children("."+o.panelClass + "."+ o.activeClass);
126+
}
127+
142128
function targetPosition($panel) {
143129
if (o.viewportDimensions && typeof o.viewportDimensions.width === "number") {
144130
return -($panel.index()*o.viewportDimensions.width);
@@ -147,18 +133,18 @@
147133
}
148134
}
149135

150-
function moveTo($panel, speed) {
136+
function moveTo($panel, noAnimate) {
151137

152138
if (!$panel.length) {
153139
return me;
154140
}
155141

156142
$elements.scroll.animate({left: targetPosition($panel)},
157-
speed, o.easing, function() {
143+
(noAnimate ? 0 : o.speed), o.easing, function() {
158144
var info;
159145

160146
if ($panel.hasClass(o.cloneClass)) {
161-
if ($panel.hasClass("beginning")) {
147+
if ($panel.hasClass("head")) {
162148
$panel = $elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).last();
163149
} else {
164150
$panel = $elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).first();
@@ -168,7 +154,7 @@
168154

169155
$panel.addClass(o.activeClass).siblings().removeClass(o.activeClass);
170156

171-
info = me.getInfo();
157+
info = me.info();
172158

173159
if (!o.circular) {
174160
if ($elements.prevBtn.length) {
@@ -187,9 +173,22 @@
187173
return me;
188174
}
189175

190-
function current() {
191-
return $elements.scroll.children("."+o.panelClass + "."+ o.activeClass);
192-
}
176+
events = {
177+
keydown: function(e) {
178+
var key;
179+
key = e.keyCode || e.which;
180+
switch (key) {
181+
case NI.co.keyboard.LEFT:
182+
e.preventDefault();
183+
e.data.instance.prev();
184+
break;
185+
case NI.co.keyboard.RIGHT:
186+
e.preventDefault();
187+
e.data.instance.next();
188+
break;
189+
}
190+
}
191+
};
193192

194193
function registerBtn(key) {
195194
var $btn;
@@ -198,16 +197,19 @@
198197
return $btn;
199198
}
200199

201-
this.registerPrevBtn = function() {
202-
return registerBtn("prevBtn");
203-
};
204-
205-
this.registerNextBtn = function() {
206-
return registerBtn("nextBtn");
207-
};
208-
209-
this.get = function() {
210-
return $c;
200+
this.info = function() {
201+
var $panels, index;
202+
$panels = $elements.scroll.children("."+o.panelClass).not("."+o.cloneClass);
203+
$panels.each(function(i, panel) {
204+
if ($(panel).hasClass(o.activeClass)) {
205+
index = i;
206+
return false;
207+
}
208+
});
209+
return {
210+
index: index,
211+
total: $panels.length
212+
};
211213
};
212214

213215
this.add = function($panel) {
@@ -221,50 +223,73 @@
221223
}
222224
}
223225
$elements.scroll.append($panel);
226+
return this;
224227
};
225228

226-
this.getInfo = function() {
227-
var $panels, index;
228-
$panels = $elements.scroll.children("."+o.panelClass).not("."+o.cloneClass);
229-
$panels.each(function(i, panel) {
230-
if ($(panel).hasClass(o.activeClass)) {
231-
index = i;
232-
return false;
233-
}
234-
});
235-
return {
236-
index: index,
237-
total: $panels.length
238-
};
229+
this.registerPrevBtn = function() {
230+
return registerBtn("prevBtn");
231+
};
232+
233+
this.registerNextBtn = function() {
234+
return registerBtn("nextBtn");
239235
};
240236

237+
238+
this.get = function() {
239+
return $c;
240+
};
241+
241242
this.refresh = function() {
242243
var $panels;
243244
if (o.circular) {
244245
$elements.scroll.children("."+o.cloneClass).remove();
245246
$panels = $elements.scroll.children("."+o.panelClass);
246-
$panels.last().clone(false).addClass(o.cloneClass +" beginning").prependTo($elements.scroll);
247-
$panels.first().clone(false).addClass(o.cloneClass +" end").appendTo($elements.scroll);
247+
$panels.last().clone(false).addClass(o.cloneClass +" head").prependTo($elements.scroll);
248+
$panels.first().clone(false).addClass(o.cloneClass +" tail").appendTo($elements.scroll);
248249
}
249250
return this;
250251
};
252+
251253

252-
this.begin = function(no_animate) {
254+
this.begin = function(noAnimate) {
253255
this.refresh();
254-
return moveTo($elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).first(), no_animate ? 0 : o.speed);
256+
return moveTo($elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).first(), noAnimate);
255257
};
256258

257-
this.next = function(no_animate) {
258-
return moveTo(current().next("."+o.panelClass), no_animate ? 0 : o.speed);
259+
this.end = function(noAnimate) {
260+
return moveTo($elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).last(), noAnimate);
259261
};
260262

261-
this.prev = function(no_animate) {
262-
return moveTo(current().prev("."+o.panelClass), no_animate ? 0 : o.speed);
263+
this.toIndex = function(index, noAnimate) {
264+
$elements.scroll.children("."+o.panelClass).not("."+o.cloneClass).each(function(i, panel) {
265+
if (i === index) {
266+
moveTo($(panel), noAnimate);
267+
return false;
268+
}
269+
});
270+
return this;
263271
};
264272

265-
//TODO
273+
this.next = function(noAnimate) {
274+
return moveTo(current().next("."+o.panelClass), noAnimate);
275+
};
276+
277+
this.prev = function(noAnimate) {
278+
return moveTo(current().prev("."+o.panelClass), noAnimate);
279+
};
280+
281+
266282
this.destroy = function() {
267-
283+
if (o.keyboard) {
284+
$(window.document).unbind("keydown.carousel", events.keydown);
285+
}
286+
if ($elements.prevBtn.length) {
287+
$elements.prevBtn.unbind("click");
288+
}
289+
if ($elements.nextBtn.length) {
290+
$elements.nextBtn.unbind("click");
291+
}
292+
$c.remove();
268293
};
269294

270295
init();

0 commit comments

Comments
 (0)