Bootstrap 4 Carousel:每张幻灯片上的单独数据间隔

med*_*ris 5 html javascript duration carousel bootstrap-4

我想为旋转木马的每张幻灯片设置数据间隔.在stackoverflow上,我找到了一个针对这种情况的JavaScript代码段,但它不能正常工作.(Twitter Bootstrap Carousel幻灯片持续时间)每张幻灯片的数据间隔都以html格式设置,五张幻灯片上的ms为3000到7000.

幻灯片的实际持续时间不符合我的期望和代码.示例:我将间隔设置为3000,幻灯片显示大约7-8秒.

js文件写在站点的页脚区域中.

这是js代码:

var t;
var start = $('#carouselExampleFade').find('.active').attr('data-interval');
t = setTimeout("$('#carouselExampleFade').carousel({interval: 1000});", start - 1000);

$('#carouselExampleFade').on('slid.bs.carousel', function() {
    clearTimeout(t);
    var duration = $(this).find('.active').attr('data-interval');

    $('#carouselExampleFade').carousel('pause');
    t = setTimeout("$('#carouselExampleFade').carousel();", duration - 1000);
})

$('.carousel-control-next').on('click', function() {
    clearTimeout(t);
});

$('.carousel-control-prev').on('click', function() {
    clearTimeout(t);
});
Run Code Online (Sandbox Code Playgroud)

旋转木马的一部分:

<div class="row">
    <div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
        <div class="carousel-inner">
            <div class="carousel-item active" data-interval="2000">
                <div class="carousel-caption d-none d-md-block text-left">
                    <h3>Willkommen im <br>Parkett!</h3>
                </div>
                <img class="d-block w-100" src="assets/img/animation/slide1.jpg" alt="First slide">
            </div>
Run Code Online (Sandbox Code Playgroud)

注意:我已更改了carousel-control-next和-prev行.(之前是 - 左和右).

有没有人有一个好主意,所以解决这个问题?

Zim*_*Zim 8

我修改了Bass Jobsen 对 Bootstrap 3.x 的回答中概述的方法,以便它适用于 Bootstrap 4 轮播。IMO,这是一种比挂钩 jQuery 事件更简洁的方法。

它覆盖interval整个轮播 ( this._config.interval) 的设置,并在各个轮播项目 ( data-interval="...")上设置间隔:

$.fn.carousel.Constructor.prototype.cycle = function (event) {

    if (!event) {
        this._isPaused = false;
      }

      if (this._interval) {
        clearInterval(this._interval)
        this._interval = null;
      }

      if (this._config.interval && !this._isPaused) {

        var $ele = $('.carousel-item-next');
        var newInterval = $ele.data('interval') || this._config.interval;
        this._interval = setInterval(
          (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),
          newInterval
        );
      }
};
Run Code Online (Sandbox Code Playgroud)

https://www.codeply.com/go/sGAOcxEzV8

  • 感谢您的帮助和努力。它运作良好! (2认同)