Skip to content

Commit 8aa341b

Browse files
committed
fix(Carousel) transition direction
1 parent cc80101 commit 8aa341b

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

src/components/carousel/carousel.js

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -277,13 +277,13 @@ export default {
277277
},
278278
// Previous slide
279279
prev () {
280+
this.direction = 'prev'
280281
this.setSlide(this.index - 1)
281-
this.direction = DIRECTION.prev
282282
},
283283
// Next slide
284284
next () {
285+
this.direction = 'next'
285286
this.setSlide(this.index + 1)
286-
this.direction = DIRECTION.next
287287
},
288288
// Pause auto rotation
289289
pause () {
@@ -298,7 +298,7 @@ export default {
298298
},
299299
// Start auto rotate slides
300300
start () {
301-
// Don't start if no intetrval, or if we are already running
301+
// Don't start if no interval, or if we are already running
302302
if (!this.interval || this.isCycling) {
303303
return
304304
}
@@ -338,6 +338,12 @@ export default {
338338
// Set slide as active
339339
this.setSlide(index)
340340
this.start()
341+
},
342+
calcDirection (direction = null, curIndex = 0, nextIndex = 0) {
343+
if (!direction) {
344+
return (nextIndex > curIndex) ? DIRECTION.next : DIRECTION.prev
345+
}
346+
return DIRECTION[direction]
341347
}
342348
},
343349
watch: {
@@ -363,7 +369,8 @@ export default {
363369
if (val === oldVal || this.isSliding) {
364370
return
365371
}
366-
372+
// Determine sliding direction
373+
let direction = this.calcDirection(this.direction, oldVal, val)
367374
// Determine current and next slides
368375
const currentSlide = this.slides[oldVal]
369376
const nextSlide = this.slides[val]
@@ -376,11 +383,11 @@ export default {
376383
this.$emit('sliding-start', val)
377384
// Update v-model
378385
this.$emit('input', this.index)
379-
nextSlide.classList.add(this.direction.overlayClass)
386+
nextSlide.classList.add(direction.overlayClass)
380387
// Trigger a reflow of next slide
381388
reflow(nextSlide)
382-
addClass(currentSlide, this.direction.dirClass)
383-
addClass(nextSlide, this.direction.dirClass)
389+
addClass(currentSlide, direction.dirClass)
390+
addClass(nextSlide, direction.dirClass)
384391
// Transition End handler
385392
let called = false
386393
/* istanbul ignore next: dificult to test */
@@ -396,12 +403,12 @@ export default {
396403
})
397404
}
398405
this._animationTimeout = null
399-
removeClass(nextSlide, this.direction.dirClass)
400-
removeClass(nextSlide, this.direction.overlayClass)
406+
removeClass(nextSlide, direction.dirClass)
407+
removeClass(nextSlide, direction.overlayClass)
401408
addClass(nextSlide, 'active')
402409
removeClass(currentSlide, 'active')
403-
removeClass(currentSlide, this.direction.dirClass)
404-
removeClass(currentSlide, this.direction.overlayClass)
410+
removeClass(currentSlide, direction.dirClass)
411+
removeClass(currentSlide, direction.overlayClass)
405412
setAttr(currentSlide, 'aria-current', 'false')
406413
setAttr(nextSlide, 'aria-current', 'true')
407414
setAttr(currentSlide, 'aria-hidden', 'true')
@@ -416,6 +423,7 @@ export default {
416423
})
417424
}
418425
this.isSliding = false
426+
this.direction = null
419427
// Notify ourselves that we're done sliding (slid)
420428
this.$nextTick(() => this.$emit('sliding-end', val))
421429
}

0 commit comments

Comments
 (0)