Bootstrap 4 轮播:每张幻灯片上的单独数据间隔
Bootstrap 4 Carousel: Individual data-interval on each slide
我想为轮播的每张幻灯片设置数据间隔。
在 Whosebug 上,我找到了这个案例的 JavaScript 片段,但效果不佳。 (Twitter Bootstrap Carousel slide duration)
每张幻灯片都在 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 和 -prev 行。 (之前是-left和-right)。
有没有人有解决这个问题的好主意?
我修改了 Bass Jobsen's answer for Bootstrap 3.x 中概述的方法,使其适用于 Bootstrap 4 轮播。 IMO,这是一种比挂接到 jQuery 事件更简洁的方法。
它覆盖了为整个轮播 (this._config.interval
) 设置的 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
);
}
};
我想为轮播的每张幻灯片设置数据间隔。 在 Whosebug 上,我找到了这个案例的 JavaScript 片段,但效果不佳。 (Twitter Bootstrap Carousel slide duration) 每张幻灯片都在 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 和 -prev 行。 (之前是-left和-right)。
有没有人有解决这个问题的好主意?
我修改了 Bass Jobsen's answer for Bootstrap 3.x 中概述的方法,使其适用于 Bootstrap 4 轮播。 IMO,这是一种比挂接到 jQuery 事件更简洁的方法。
它覆盖了为整个轮播 (this._config.interval
) 设置的 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
);
}
};