Skip to content
This repository was archived by the owner on Feb 24, 2023. It is now read-only.

Commit a96569b

Browse files
author
Łukasz Florczak
committed
Infinite mode disable/enable in responsive settings
1 parent f737038 commit a96569b

File tree

1 file changed

+40
-18
lines changed

1 file changed

+40
-18
lines changed

src/Agile.vue

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,6 @@
188188
this.el.slides = this.$el.getElementsByClassName('agile__track')[0].children
189189
this.slidesCount = this.el.slides.length
190190
191-
if (this.settings.infinite && !this.settings.fade) {
192-
this.allSlidesCount = this.slidesCount + 2
193-
} else {
194-
this.allSlidesCount = this.slidesCount
195-
}
196-
197191
for (let i = 0; i < this.slidesCount; ++i) {
198192
this.el.slides[i].classList.add('agile__slide')
199193
@@ -206,18 +200,6 @@
206200
// Prepare track
207201
this.el.track = this.$el.getElementsByClassName('agile__track')[0]
208202
209-
// Prepare infinity mode
210-
if (this.settings.infinite && !this.settings.fade) {
211-
let firstSlide = this.el.track.firstChild.cloneNode(true)
212-
let lastSlide = this.el.track.lastChild.cloneNode(true)
213-
214-
firstSlide.classList.add('agile__slide--cloned')
215-
lastSlide.classList.add('agile__slide--cloned')
216-
217-
this.el.track.prepend(lastSlide)
218-
this.el.track.append(firstSlide)
219-
}
220-
221203
// Prepare autoplay
222204
if (this.settings.autoplay) {
223205
this.startAutoplay()
@@ -331,6 +313,39 @@
331313
this.enableScroll()
332314
},
333315
316+
enableInfiniteMode () {
317+
if (!this.settings.fade && !this.el.list.getElementsByClassName('agile__slide--cloned')[0]) {
318+
let firstSlide = this.el.track.firstChild.cloneNode(true)
319+
let lastSlide = this.el.track.lastChild.cloneNode(true)
320+
321+
firstSlide.classList.add('agile__slide--cloned')
322+
lastSlide.classList.add('agile__slide--cloned')
323+
324+
this.el.track.prepend(lastSlide)
325+
this.el.track.append(firstSlide)
326+
}
327+
328+
this.countSlides()
329+
},
330+
331+
disableInfiniteMode () {
332+
let clonedSlides = this.el.list.getElementsByClassName('agile__slide--cloned')
333+
334+
while (clonedSlides[0]) {
335+
clonedSlides[0].parentNode.removeChild(clonedSlides[0])
336+
}
337+
338+
this.countSlides()
339+
},
340+
341+
countSlides () {
342+
if (this.settings.infinite && !this.settings.fade) {
343+
this.allSlidesCount = this.slidesCount + 2
344+
} else {
345+
this.allSlidesCount = this.slidesCount
346+
}
347+
},
348+
334349
disableScroll () {
335350
document.ontouchmove = function (e) {
336351
e.preventDefault()
@@ -466,6 +481,13 @@
466481
Object.assign(this.settings, responsiveSettings)
467482
}
468483
484+
// Check infinity mode status and enable/disable
485+
if (this.settings.infinite) {
486+
this.enableInfiniteMode()
487+
} else {
488+
this.disableInfiniteMode()
489+
}
490+
469491
// Actions on document resize
470492
for (let i = 0; i < this.allSlidesCount; ++i) {
471493
this.el.slides[i].style.width = this.width.container + 'px'

0 commit comments

Comments
 (0)