diff --git a/js/src/carousel.js b/js/src/carousel.js index 989390aa0a..3c7e2b2d91 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -289,15 +289,13 @@ class Carousel { } const move = (event) => { - if (!this._pointerEvent) { - event.preventDefault() + event.preventDefault() - // ensure swiping with one touch and not pinching - if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { - this.touchDeltaX = 0 - } else { - this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX - } + // ensure swiping with one touch and not pinching + if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { + this.touchDeltaX = 0 + } else { + this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX } } @@ -307,7 +305,6 @@ class Carousel { } this._handleSwipe() - if (this._config.pause === 'hover') { // If it's a touch-enabled device, mouseenter/leave are fired as // part of the mouse compatibility events on first tap - the carousel diff --git a/js/tests/unit/carousel.js b/js/tests/unit/carousel.js index d7d9ad2508..d6fea2f34e 100644 --- a/js/tests/unit/carousel.js +++ b/js/tests/unit/carousel.js @@ -1226,4 +1226,48 @@ $(function () { done() }) }) + + QUnit.test('should not call _slide if the carousel is sliding', function (assert) { + assert.expect(1) + + var carouselHTML = '' + var $carousel = $(carouselHTML) + $carousel.appendTo('#qunit-fixture') + $carousel.bootstrapCarousel() + + var carousel = $carousel.data('bs.carousel') + + var spy = sinon.spy(carousel, '_slide') + + carousel._isSliding = true + + carousel.next() + + assert.strictEqual(spy.called, false) + }) + + QUnit.test('should call next when the page is visible', function (assert) { + assert.expect(1) + + var carouselHTML = '' + var $carousel = $(carouselHTML) + $carousel.appendTo('#qunit-fixture') + $carousel.bootstrapCarousel() + + var carousel = $carousel.data('bs.carousel') + + var spy = sinon.spy(carousel, 'next') + var sandbox = sinon.createSandbox() + + sandbox.replaceGetter(document, 'hidden', function () { + return false + }) + sandbox.stub($carousel, 'is').returns(true) + sandbox.stub($carousel, 'css').returns('block') + + carousel.nextWhenVisible() + + assert.strictEqual(spy.called, true) + sandbox.restore() + }) })