diff options
| author | Johann-S <[email protected]> | 2015-09-27 01:30:11 +0200 |
|---|---|---|
| committer | Chris Rebert <[email protected]> | 2015-10-11 15:10:49 -0700 |
| commit | 817d997b75d970cc22000f345f68092ed3f0525b (patch) | |
| tree | 662f82d45a1989aaf3e02d5270550692a87d12cf | |
| parent | 9b12e5f495535aa64bcf77703c51b17742ec7f06 (diff) | |
| download | bootstrap-817d997b75d970cc22000f345f68092ed3f0525b.tar.xz bootstrap-817d997b75d970cc22000f345f68092ed3f0525b.zip | |
Use Page Visibility API in Carousel; fixes #17706
Avoids cycling carousels when the page isn't visible.
Closes #17710
Refs #15566
| -rw-r--r-- | js/src/carousel.js | 9 | ||||
| -rw-r--r-- | js/tests/visual/carousel.html | 10 |
2 files changed, 17 insertions, 2 deletions
diff --git a/js/src/carousel.js b/js/src/carousel.js index d8da854a2..8d47fbf9b 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -119,6 +119,13 @@ const Carousel = (($) => { } } + nextWhenVisible() { + // Don't call next when the page isn't visible + if (!document.hidden) { + this.next() + } + } + prev() { if (!this._isSliding) { this._slide(Direction.PREVIOUS) @@ -152,7 +159,7 @@ const Carousel = (($) => { if (this._config.interval && !this._isPaused) { this._interval = setInterval( - $.proxy(this.next, this), this._config.interval + $.proxy(document.visibilityState ? this.nextWhenVisible : this.next, this), this._config.interval ) } } diff --git a/js/tests/visual/carousel.html b/js/tests/visual/carousel.html index 47dacaa6a..e6bfeedab 100644 --- a/js/tests/visual/carousel.html +++ b/js/tests/visual/carousel.html @@ -21,7 +21,7 @@ <div class="page-header"> <h1>Carousel <small>Bootstrap Visual Test</small></h1> </div> - + <p>Also, the carousel shouldn't slide when its window/tab is hidden. Check the console log.</p> <div id="carousel-example-generic" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> @@ -53,6 +53,14 @@ <script src="../vendor/jquery.min.js"></script> <script src="../../dist/util.js"></script> <script src="../../dist/carousel.js"></script> +<script> + $(function () { + // Test to show that the carousel doesn't slide when the current tab isn't visible + $('#carousel-example-generic').on('slid.bs.carousel', function (event) { + console.log('slid at ', event.timeStamp); + }) + }); +</script> </body> </html> |
