javascript - 在不同位置具有不同“slidesToShow”的光滑轮播
问题描述
我想要一个光滑的轮播,在某些位置,它显示 3 张幻灯片,而在其他位置,它显示 1 张幻灯片。这是我尝试过的东西:
$(".carousel").slick({
// IMPORTANT
variableWidth: true,
// not so important
dots: true,
appendArrows: $(".carousel-arrows"),
nextArrow: "<button>Next</button>",
prevArrow: "<button>Previous</button>"
});
$(".wanted-behavior").click(function() {
$(".carousel").slick("slickGoTo", 0, true);
setTimeout(function() {$(".carousel").slick("slickPrev");}, 500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 2000)
});
$(".unwanted-behavior").click(function() {
$(".carousel").slick("slickGoTo", 1, true);
setTimeout(function() {$(".carousel").slick("slickNext");}, 500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 1500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 2500)
setTimeout(function() {$(".carousel").slick("slickPrev");}, 4000)
});
/* IMPORTANT */
.carousel-img {
width: 33vw!important;
}
.carousel-img-big {
width: 100vw!important;
}
/* not so important */
.carousel-img img,
.carousel-img-big img {
width: 100%;
object-fit: cover;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">
<div class="carousel-arrows"></div>
<div class="carousel">
<div class="carousel-img"><img src="https://picsum.photos/200"></div>
<div class="carousel-img"><img src="https://picsum.photos/201"></div>
<div class="carousel-img"><img src="https://picsum.photos/202"></div>
<div class="carousel-img"><img src="https://picsum.photos/203"></div>
<div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
</div>
<button class="wanted-behavior" type="button">Wanted Behaviour</button>
<button class="unwanted-behavior" type="button">Unwanted Behaviour</button>
这只是使用variableWidth
光滑轮播的选项,其中幻灯片设置为33vw
,一个设置为100vw
。
问题在于,轮播的一些位置只显示了大 ( 100vw
) 幻灯片的一小部分,这是我不想要的。屏幕上应该有 3 张幻灯片或一张大幻灯片。我添加了按钮来显示它想要的和不需要的行为。
所以一般来说,我的问题是:
“我怎样才能有一个光滑的轮播,不同的位置显示不同数量的幻灯片? ”
也许有一些与我在上面尝试过的完全不同的东西,这正是我尝试过的。
感谢您的任何反馈!
解决方案
我是这个问题的创造者......我实际上已经找到了答案,我只是觉得对于我正在尝试做的简单事情来说过于复杂,我相信有更好的方法。但由于这篇文章没有太多活动,我还是会给出答案(尽管我不会接受)。
继续我在问题中尝试的内容,我有一个带有variableWidth
选项的光滑轮播,并且幻灯片占用了33vw
,除了一个占用100vw
.
$(".carousel").slick({
// IMPORTANT
variableWidth: true,
// not so important
dots: true,
appendArrows: $(".carousel-arrows"),
nextArrow: "<button>Next</button>",
prevArrow: "<button>Previous</button>"
});
$(".wanted-behavior").click(function() {
$(".carousel").slick("slickGoTo", 0, true);
setTimeout(function() {$(".carousel").slick("slickPrev");}, 500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 2000)
});
$(".unwanted-behavior").click(function() {
$(".carousel").slick("slickGoTo", 1, true);
setTimeout(function() {$(".carousel").slick("slickNext");}, 500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 1500)
setTimeout(function() {$(".carousel").slick("slickNext");}, 2500)
setTimeout(function() {$(".carousel").slick("slickPrev");}, 4000)
});
/* IMPORTANT */
.carousel-img {
width: 33vw!important;
}
.carousel-img-big {
width: 100vw!important;
}
/* not so important */
.carousel-img img,
.carousel-img-big img {
width: 100%;
object-fit: cover;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">
<div class="carousel-arrows"></div>
<div class="carousel">
<div class="carousel-img"><img src="https://picsum.photos/200"></div>
<div class="carousel-img"><img src="https://picsum.photos/201"></div>
<div class="carousel-img"><img src="https://picsum.photos/202"></div>
<div class="carousel-img"><img src="https://picsum.photos/203"></div>
<div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
</div>
<button class="wanted-behavior" type="button">Wanted Behaviour</button>
<button class="unwanted-behavior" type="button">Unwanted Behaviour</button>
然后我添加的是一个检查,每次在幻灯片更改之前,都会询问它想要转到的幻灯片是否是“坏位置”,如果是,它会跳过“坏位置”到下一个“好位置” ”。最后,如果启用了轮播dots
,我们需要删除“坏位置”对应的点,所以我们也这样做。结果是:
$(".carousel").slick({
// IMPORTANT
variableWidth: true,
// not so important
dots: true,
appendArrows: $(".carousel-arrows"),
nextArrow: "<button>Next</button>",
prevArrow: "<button>Previous</button>"
});
// IMPORTANT
$($(".carousel .slick-dots").children().get().slice(2, 4)).css("display", "none");
$(".carousel").on('beforeChange', function(event, slick, currentSlide, nextSlide){
if ((nextSlide==2 || nextSlide==3) && (currentSlide!=4)) {
$(".carousel").slick("slickSetOption", "waitForAnimate", false)
setTimeout(function() {
$(".carousel").slick("slickGoTo", 4, false);
$(".carousel").slick("slickSetOption", "waitForAnimate", true);
}, 1);
} else if ((nextSlide==2 || nextSlide==3) && (currentSlide==4)) {
$(".carousel").slick("slickSetOption", "waitForAnimate", false)
setTimeout(function() {
$(".carousel").slick("slickGoTo", 1, false);
$(".carousel").slick("slickSetOption", "waitForAnimate", true);
}, 1);
};
});
/* IMPORTANT */
.carousel-img {
width: 33vw!important;
}
.carousel-img-big {
width: 100vw!important;
}
/* not so important */
.carousel-img img,
.carousel-img-big img {
width: 100%;
object-fit: cover;
height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.js" integrity="sha512-HGOnQO9+SP1V92SrtZfjqxxtLmVzqZpjFFekvzZVWoiASSQgSr4cw9Kqd2+l8Llp4Gm0G8GIFJ4ddwZilcdb8A==" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.min.css">
<div class="carousel-arrows"></div>
<div class="carousel">
<div class="carousel-img"><img src="https://picsum.photos/200"></div>
<div class="carousel-img"><img src="https://picsum.photos/201"></div>
<div class="carousel-img"><img src="https://picsum.photos/202"></div>
<div class="carousel-img"><img src="https://picsum.photos/203"></div>
<div class="carousel-img-big"><img src="https://picsum.photos/204"></div>
</div>
推荐阅读
- java - Spring 方法注解 null
- c++ - 这个数组索引器如何帮助合并内存访问?
- python - 请用“+1:”解释return
- python - 使用 XPath 从元素下载 HTML 代码 - Python Selenium
- weblogic - 从 weblogic 服务器中删除集群设置
- php - App\Models\ 必须返回一个关系实例
- r - 如何在分组条形图上添加 p 值
- branch - 100%覆盖需要多少个测试用例
- reactjs - 如何在单独的文件中使用 Framer Motion 错开儿童?
- google-apps-script - ContinuationToken 函数中途中断