mirror of
https://github.com/twbs/bootstrap.git
synced 2025-08-06 13:46:42 +02:00
Carousel: Fix not used option (ride
), simplify cycle
method (#35983)
* Fix not used option (`ride`) (according to docs), continuing of #35753 a247fe9
* separate concept of `programmatical cycle` vs `maybe cycle after click` functionality
This commit is contained in:
@@ -71,19 +71,19 @@ const KEY_TO_DIRECTION = {
|
||||
const Default = {
|
||||
interval: 5000,
|
||||
keyboard: true,
|
||||
slide: false,
|
||||
pause: 'hover',
|
||||
wrap: true,
|
||||
touch: true
|
||||
ride: false,
|
||||
touch: true,
|
||||
wrap: true
|
||||
}
|
||||
|
||||
const DefaultType = {
|
||||
interval: '(number|boolean)',
|
||||
keyboard: 'boolean',
|
||||
slide: '(boolean|string)',
|
||||
ride: '(boolean|string)',
|
||||
pause: '(string|boolean)',
|
||||
wrap: 'boolean',
|
||||
touch: 'boolean'
|
||||
touch: 'boolean',
|
||||
wrap: 'boolean'
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,13 +96,16 @@ class Carousel extends BaseComponent {
|
||||
|
||||
this._interval = null
|
||||
this._activeElement = null
|
||||
this._stayPaused = false
|
||||
this._isSliding = false
|
||||
this.touchTimeout = null
|
||||
this._swipeHelper = null
|
||||
|
||||
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)
|
||||
this._addEventListeners()
|
||||
|
||||
if (this._config.ride === CLASS_NAME_CAROUSEL) {
|
||||
this.cycle()
|
||||
}
|
||||
}
|
||||
|
||||
// Getters
|
||||
@@ -136,30 +139,32 @@ class Carousel extends BaseComponent {
|
||||
this._slide(ORDER_PREV)
|
||||
}
|
||||
|
||||
pause(event) {
|
||||
if (!event) {
|
||||
this._stayPaused = true
|
||||
}
|
||||
|
||||
pause() {
|
||||
if (this._isSliding) {
|
||||
triggerTransitionEnd(this._element)
|
||||
this.cycle(true)
|
||||
}
|
||||
|
||||
this._clearInterval()
|
||||
}
|
||||
|
||||
cycle(event) {
|
||||
if (!event) {
|
||||
this._stayPaused = false
|
||||
}
|
||||
|
||||
cycle() {
|
||||
this._clearInterval()
|
||||
if (this._config.interval && !this._stayPaused) {
|
||||
this._updateInterval()
|
||||
this._updateInterval()
|
||||
|
||||
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
|
||||
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)
|
||||
}
|
||||
|
||||
_maybeEnableCycle() {
|
||||
if (!this._config.ride) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this._isSliding) {
|
||||
EventHandler.one(this._element, EVENT_SLID, () => this.cycle())
|
||||
return
|
||||
}
|
||||
|
||||
this.cycle()
|
||||
}
|
||||
|
||||
to(index) {
|
||||
@@ -175,8 +180,6 @@ class Carousel extends BaseComponent {
|
||||
|
||||
const activeIndex = this._getItemIndex(this._getActive())
|
||||
if (activeIndex === index) {
|
||||
this.pause()
|
||||
this.cycle()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -205,8 +208,8 @@ class Carousel extends BaseComponent {
|
||||
}
|
||||
|
||||
if (this._config.pause === 'hover') {
|
||||
EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))
|
||||
EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))
|
||||
EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())
|
||||
EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())
|
||||
}
|
||||
|
||||
if (this._config.touch && Swipe.isSupported()) {
|
||||
@@ -237,7 +240,7 @@ class Carousel extends BaseComponent {
|
||||
clearTimeout(this.touchTimeout)
|
||||
}
|
||||
|
||||
this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
|
||||
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
|
||||
}
|
||||
|
||||
const swipeConfig = {
|
||||
@@ -331,12 +334,10 @@ class Carousel extends BaseComponent {
|
||||
return
|
||||
}
|
||||
|
||||
this._isSliding = true
|
||||
|
||||
const isCycling = Boolean(this._interval)
|
||||
if (isCycling) {
|
||||
this.pause()
|
||||
}
|
||||
this.pause()
|
||||
|
||||
this._isSliding = true
|
||||
|
||||
this._setActiveIndicatorElement(nextElementIndex)
|
||||
this._activeElement = nextElement
|
||||
@@ -420,12 +421,6 @@ class Carousel extends BaseComponent {
|
||||
}
|
||||
|
||||
data[config]()
|
||||
return
|
||||
}
|
||||
|
||||
if (data._config.interval && data._config.ride) {
|
||||
data.pause()
|
||||
data.cycle()
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -449,15 +444,18 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (e
|
||||
|
||||
if (slideIndex) {
|
||||
carousel.to(slideIndex)
|
||||
carousel._maybeEnableCycle()
|
||||
return
|
||||
}
|
||||
|
||||
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
|
||||
carousel.next()
|
||||
carousel._maybeEnableCycle()
|
||||
return
|
||||
}
|
||||
|
||||
carousel.prev()
|
||||
carousel._maybeEnableCycle()
|
||||
})
|
||||
|
||||
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
|
||||
|
Reference in New Issue
Block a user