40
40
* @see BaseDominoElement
41
41
*/
42
42
public class Carousel extends BaseDominoElement <HTMLDivElement , Carousel > {
43
- /** Constant <code>NEXT="next"</code> */
44
- public static final String NEXT = "next" ;
45
- /** CSS class for previous indicator */
46
- public static final String PREV = "prev" ;
47
43
48
44
private final OListElement indicatorsElement ;
49
45
private final DivElement slidesElement ;
@@ -62,6 +58,15 @@ public class Carousel extends BaseDominoElement<HTMLDivElement, Carousel> {
62
58
private int autoSlideDuration = 3000 ;
63
59
private boolean attached = false ;
64
60
61
+ /**
62
+ * Factory method to create an empty Carousel
63
+ *
64
+ * @return new instance
65
+ */
66
+ public static Carousel create () {
67
+ return new Carousel ();
68
+ }
69
+
65
70
/** Creates and empty Carousel */
66
71
public Carousel () {
67
72
@@ -76,12 +81,7 @@ public Carousel() {
76
81
.appendChild (
77
82
Icons .chevron_left ()
78
83
.addCss (GenericCss .dui_vertical_center , dui_font_size_12 ))
79
- .addEventListener (
80
- "click" ,
81
- evt -> {
82
- resetTimer ();
83
- prevSlide ();
84
- }))
84
+ .addEventListener ("click" , evt -> previous ()))
85
85
.appendChild (
86
86
nextElement =
87
87
a ().addCss (slide_right , carousel_control )
@@ -92,8 +92,7 @@ public Carousel() {
92
92
.addEventListener (
93
93
"click" ,
94
94
evt -> {
95
- resetTimer ();
96
- nextSlide ();
95
+ next ();
97
96
}))
98
97
.addCss (carousel );
99
98
timer =
@@ -108,6 +107,52 @@ public void run() {
108
107
init (this );
109
108
}
110
109
110
+ /**
111
+ * Programmatically move to the next slide and reset the slide timer
112
+ *
113
+ * @return Same Carousel instance
114
+ */
115
+ public Carousel next () {
116
+ resetTimer ();
117
+ nextSlide ();
118
+ return this ;
119
+ }
120
+
121
+ /**
122
+ * Programmatically move to the previous slide and reset the slide timer
123
+ *
124
+ * @return Same Carousel instance
125
+ */
126
+ public Carousel previous () {
127
+ resetTimer ();
128
+ prevSlide ();
129
+ return this ;
130
+ }
131
+
132
+ /**
133
+ * Programmatically move to the specified slide sliding to the provided direction and reset the
134
+ * slide timer
135
+ *
136
+ * @return Same Carousel instance
137
+ */
138
+ public Carousel gotToSlide (Slide slide , SlideDirection direction ) {
139
+ resetTimer ();
140
+ goToSlide (slide , direction );
141
+ return this ;
142
+ }
143
+
144
+ /**
145
+ * Programmatically move to the slide of the specified index sliding to the provided direction and
146
+ * reset the slide timer
147
+ *
148
+ * @return Same Carousel instance
149
+ */
150
+ public Carousel gotToSlide (int index , SlideDirection direction ) {
151
+ resetTimer ();
152
+ goToSlide (slides .get (index ), direction );
153
+ return this ;
154
+ }
155
+
111
156
private void resetTimer () {
112
157
if (autoSlide ) {
113
158
timer .cancel ();
@@ -137,15 +182,6 @@ private void addAttachListener() {
137
182
});
138
183
}
139
184
140
- /**
141
- * Factory method to create an empty Carousel
142
- *
143
- * @return new instance
144
- */
145
- public static Carousel create () {
146
- return new Carousel ();
147
- }
148
-
149
185
/**
150
186
* Adds new {@link org.dominokit.domino.ui.carousel.Slide} to this Carousel
151
187
*
@@ -161,7 +197,7 @@ public Carousel appendChild(Slide slide) {
161
197
"click" ,
162
198
evt -> {
163
199
resetTimer ();
164
- goToSlide (slide , "" );
200
+ goToSlide (slide , SlideDirection . NONE );
165
201
});
166
202
167
203
slide .element ().addEventListener ("webkitTransitionEnd" , evt -> removeMotionStyles ());
@@ -189,7 +225,7 @@ private void nextSlide() {
189
225
nextSlide = slides .get (0 );
190
226
}
191
227
192
- goToSlide (nextSlide , NEXT );
228
+ goToSlide (nextSlide , SlideDirection . NEXT );
193
229
}
194
230
195
231
private void prevSlide () {
@@ -200,10 +236,10 @@ private void prevSlide() {
200
236
prevSlide = slides .get (slides .size () - 1 );
201
237
}
202
238
203
- goToSlide (prevSlide , PREV );
239
+ goToSlide (prevSlide , SlideDirection . PREV );
204
240
}
205
241
206
- private void goToSlide (Slide slide , String source ) {
242
+ private void goToSlide (Slide slide , SlideDirection source ) {
207
243
if (!slide .isActive ()) {
208
244
this .targetSlide = slide ;
209
245
slide .getIndicatorElement ().addCss (dui_active );
@@ -222,18 +258,20 @@ private void goToSlide(Slide slide, String source) {
222
258
}
223
259
}
224
260
225
- private CssClass getPositionStyle (Slide target , String source ) {
226
- if ((slides .indexOf (target ) > slides .indexOf (activeSlide ) && !PREV .equals (source ))
227
- || (NEXT .equals (source ))) {
261
+ private CssClass getPositionStyle (Slide target , SlideDirection source ) {
262
+ if ((slides .indexOf (target ) > slides .indexOf (activeSlide )
263
+ && !SlideDirection .PREV .equals (source ))
264
+ || (SlideDirection .NEXT .equals (source ))) {
228
265
return slide_next ;
229
266
} else {
230
267
return slide_prev ;
231
268
}
232
269
}
233
270
234
- private CssClass getDirectionStyle (Slide target , String source ) {
235
- if ((slides .indexOf (target ) > slides .indexOf (activeSlide ) && !PREV .equals (source ))
236
- || (NEXT .equals (source ))) {
271
+ private CssClass getDirectionStyle (Slide target , SlideDirection source ) {
272
+ if ((slides .indexOf (target ) > slides .indexOf (activeSlide )
273
+ && !SlideDirection .PREV .equals (source ))
274
+ || (SlideDirection .NEXT .equals (source ))) {
237
275
return slide_left ;
238
276
} else {
239
277
return slide_right ;
@@ -367,4 +405,12 @@ public List<Slide> getSlides() {
367
405
public Slide getActiveSlide () {
368
406
return activeSlide ;
369
407
}
408
+
409
+ public enum SlideDirection {
410
+ NONE ,
411
+ /** CSS class for previous indicator */
412
+ PREV ,
413
+ /** Constant <code>NEXT="next"</code> */
414
+ NEXT
415
+ }
370
416
}
0 commit comments