我正在使用带有模态内容的 Slick 轮播。一切正常,但是当尝试使用打开的选项卡/窗口中的上一个/下一个处理程序从一个元素浏览到另一个元素时。图像卡在垂直位置。
<section>
<div>
<a data-open="first-project" class="card cell aos-init" data-aos="slide-up" aria-controls="project-1" aria-haspopup="true" tabindex="0">
<div><img src="first-project-1.jpg"></div>
</a>
</div>
<div>
<a data-open="second-project" class="card cell aos-init" data-aos="slide-up" aria-controls="project-1" aria-haspopup="true" tabindex="0">
<div><img src="second-project-1.jpg"></div>
</a>
</div>
</section>
<div class="reveal modal" id="first-project" data-reveal data-close-on-click="true" data-animation-in="slide-in-right" data-animation-out="slide-out-right" data-resize="first-project">
<div><a data-open="second-project"><span>Next </span><i class="fas fa-caret-right"></i></a></div>
<div class="carousel">
<div><img src="first-project-1.jpg"></div>
<div><img src="first-project-2.jpg"></div>
<div><img src="first-project-3.jpg"></div>
<div><img src="first-project-4.jpg"></div>
</div>
<a class="close-button close-reveal-modal" aria-label="Close" data-close <span aria-hidden="true">X</span></a>
</div>
<div class="reveal modal" id="second-project" data-reveal data-close-on-click="true" data-animation-in="slide-in-right" data-animation-out="slide-out-right" data-resize="second-project">
<div><a data-open="first-project"><i class="fas fa-caret-left"></i> <span class="pr-txt">Previous</span></a></div>
<div class="carousel">
<div><img src="second-project-1.jpg"></div>
<div><img src="second-project-2.jpg"></div>
<div><img src="second-project-3.jpg"></div>
<div><img src="second-project-4.jpg"></div>
</div>
X
$(document).on('open.zf.reveal', '[data-reveal]', function () {
var modal = $(this);
$('.carousel').slick({
autoplay: true,
infinite: true,
arrows:true,
nextArrow: '<i class="fas fa-caret-right"></i',
prevArrow: '<i class="fas fa-caret-left"></i',
autoplaySpeed: 3000,
speed: 1500,
slidesToShow: 2,
slidesToScroll:1
});
});
$(document).on('closed.zf.reveal', '[data-reveal]', function () {
var modal = $(this);
$('.carousel').slick('unslick');
});
问题可能是因为“unslick”,但我必须使用它才能在打开模态窗口时保持 slider 正常工作。如果没有“unslick”,轮播无法正确加载(有时显示速度很快,有时显示 slider 需要一些时间)。
谢谢。
最佳答案
你需要更换
$('.carousel').slick(...)
与
$('.carousel', this).slick(...)
它只会针对当前模式中的 .carousel
,它在显示回调中被 this
引用。
此外,在模态 close
上销毁 slick 可能是个好主意,而不是在 closed
上(最好在模态关闭时销毁它,而不是关闭后)。如果它被销毁得太早,请将其保留在closed
状态。
请注意您有严重的标记问题(即:您的链接 src
属性未关闭)。您可能希望通过 HTML 验证器运行您的代码,直到您解决所有验证问题。
在那之后,以下应该起作用:
$(document).on('open.zf.reveal', '[data-reveal]', function () {
$('.carousel', this).slick({
autoplay: true,
infinite: true,
arrows:true,
nextArrow: '<i class="fas fa-caret-right"></i',
prevArrow: '<i class="fas fa-caret-left"></i',
autoplaySpeed: 3000,
speed: 1500,
slidesToShow: 2,
slidesToScroll:1
});
}).on('close.zf.reveal', '[data-reveal]', function () {
$('.carousel', this).slick('unslick');
});
关于jquery - Slick Carousel - 在模式选项卡/窗口内浏览时图像卡在垂直位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466838/