Bootstrap 4 轮播图:每个幻灯片的独立数据间隔

7
我想为走马灯设置每个幻灯片的数据间隔。我在stackoverflow上找到了一个JavaScript代码片段,但它并不完美。(Twitter Bootstrap Carousel slide duration)每个幻灯片都有其数据间隔以ms为单位内联设置在html中,从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);
});

旋转木马的一部分:

<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>

注意:我已经更改了轮播控制器的代码行carousel-control-next和-carousel-control-prev。(之前是-left和-right)
有人有解决这个问题的好方法吗?

1
"我在stackoverflow上找到了一个针对这种情况的JavaScript代码片段" -- 请参考此问题/答案 - Carol Skelly
谢谢。我已经添加了这个引用。 - cd-media
1个回答

8
我修改了 Bass Jobsen's answer for Bootstrap 3.x 中提到的方法,使其适用于Bootstrap 4轮播。我认为,这比钩入jQuery事件更加清晰明了。
它覆盖了整个Carousel设置的intervalthis._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
        );
      }
};

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


2
谢谢你的帮助和付出。它运行良好! - cd-media
1
我对你的代码进行了最小更改,以支持多个走马灯。基本上是将这行代码:var $ele = $('.carousel-item-next'); 替换为这行代码:var $ele = $(this._element).find('.carousel-item-next');。这里有一个例子:https://stackoverflow.com/questions/53635583/individual-data-intervals-bootstrap-carousel-4 - Shidersz
这个很棒。然而,在页面加载时,第一项的持续时间是 Bootstrap 的默认值 5000ms。为了尊重第一项的持续时间,请将 data-interval 属性设置为轮播容器,并将其值设置为第一项的持续时间。之后,即使循环,每个项目的持续时间也将被尊重。 - aullah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接