Slick.js: 如何用数组写for循环?
Slick.js: How to write for loop with an array?
我正在尝试使用 slick.js 为我的每个画廊实现幻灯片编号。
我的代码运行良好,但我相信它可以比为每个 id 重复每一行代码更容易编写。由于我的原始文档中有很多画廊,所以这变得非常混乱。
我对数组很熟悉,但是我不知道jQuery.
中的"for"循环代码应该怎么写
这是我的代码:
$(document).ready(function() {
var $status = $('.pagingInfo');
$('#doc12-1').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
//currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
var i = (currentSlide ? currentSlide : 0) + 1;
$status.text(i + '/' + slick.slideCount);
});
var $status2 = $('.pagingInfo2');
$('#doc11-1').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
var i = (currentSlide ? currentSlide : 0) + 1;
$status2.text(i + '/' + slick.slideCount);
});
$('.gallery').slick({
fade: true,
dots: false,
prevArrow: false,
nextArrow: false,
speed: 0,
});
});
<div class="medium">
<figure id="doc12-1" class="gallery">
<div><img data-lazy="p/doc12/repros/doc12-1.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-2.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-3.jpg"></div>
</figure>
<span class="pagingInfo"></span>
</div>
<div class="medium">
<figure id="doc11-1" class="gallery">
<div><img data-lazy="p/doc11/repros/doc11-1.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-2.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-3.jpg"></div>
</figure>
<span class="pagingInfo2"></span>
</div>
感谢您的帮助!
您可以创建一个 ID 数组 (['doc12-1', 'doc11-1', ...]
) 并在其上循环;或者,我建议将特定的 class 名称放入要循环的所有元素中,并将 .on()
放入循环体中。
您可以选择使用 $.each or $.map 作为循环结构。
编辑:我刚刚意识到,当你在该集合上执行 $('.gallery') 和 运行 a .on() 时,你根本不需要循环,它会将 function() 分配给该过滤器的所有元素。
每个 doc 元素的状态元素都可以放在 data-status-filter
属性中,您可以在循环遍历每个元素时获取该属性。
下面的代码片段将不起作用,因为我还没有添加 slick 到它 - 不过它会给你一个想法。
$(document).ready(function() {
$('.gallery').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide){
var currentStatusFilter = $(this).data().statusFilter;
console.log(currentStatusFilter);
var i = (currentSlide ? currentSlide : 0) + 1;
$(currentStatusFilter).text(i + '/' + slick.slideCount);
});
$('.gallery').slick({
fade: true,
dots: false,
prevArrow: false,
nextArrow: false,
speed: 0,
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="medium">
<figure id="doc12-1" class="gallery" data-status-filter=".pagingInfo">
<div><img data-lazy="p/doc12/repros/doc12-1.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-2.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-3.jpg"></div>
</figure>
<span class="pagingInfo"></span>
</div>
<div class="medium">
<figure id="doc11-1" class="gallery" data-status-filter=".pagingInfo2">
<div><img data-lazy="p/doc11/repros/doc11-1.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-2.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-3.jpg"></div>
</figure>
<span class="pagingInfo2"></span>
</div>
我正在尝试使用 slick.js 为我的每个画廊实现幻灯片编号。
我的代码运行良好,但我相信它可以比为每个 id 重复每一行代码更容易编写。由于我的原始文档中有很多画廊,所以这变得非常混乱。 我对数组很熟悉,但是我不知道jQuery.
中的"for"循环代码应该怎么写这是我的代码:
$(document).ready(function() {
var $status = $('.pagingInfo');
$('#doc12-1').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
//currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
var i = (currentSlide ? currentSlide : 0) + 1;
$status.text(i + '/' + slick.slideCount);
});
var $status2 = $('.pagingInfo2');
$('#doc11-1').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide) {
var i = (currentSlide ? currentSlide : 0) + 1;
$status2.text(i + '/' + slick.slideCount);
});
$('.gallery').slick({
fade: true,
dots: false,
prevArrow: false,
nextArrow: false,
speed: 0,
});
});
<div class="medium">
<figure id="doc12-1" class="gallery">
<div><img data-lazy="p/doc12/repros/doc12-1.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-2.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-3.jpg"></div>
</figure>
<span class="pagingInfo"></span>
</div>
<div class="medium">
<figure id="doc11-1" class="gallery">
<div><img data-lazy="p/doc11/repros/doc11-1.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-2.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-3.jpg"></div>
</figure>
<span class="pagingInfo2"></span>
</div>
感谢您的帮助!
您可以创建一个 ID 数组 (['doc12-1', 'doc11-1', ...]
) 并在其上循环;或者,我建议将特定的 class 名称放入要循环的所有元素中,并将 .on()
放入循环体中。
您可以选择使用 $.each or $.map 作为循环结构。
编辑:我刚刚意识到,当你在该集合上执行 $('.gallery') 和 运行 a .on() 时,你根本不需要循环,它会将 function() 分配给该过滤器的所有元素。
每个 doc 元素的状态元素都可以放在 data-status-filter
属性中,您可以在循环遍历每个元素时获取该属性。
下面的代码片段将不起作用,因为我还没有添加 slick 到它 - 不过它会给你一个想法。
$(document).ready(function() {
$('.gallery').on('init reInit afterChange', function(event, slick, currentSlide, nextSlide){
var currentStatusFilter = $(this).data().statusFilter;
console.log(currentStatusFilter);
var i = (currentSlide ? currentSlide : 0) + 1;
$(currentStatusFilter).text(i + '/' + slick.slideCount);
});
$('.gallery').slick({
fade: true,
dots: false,
prevArrow: false,
nextArrow: false,
speed: 0,
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="medium">
<figure id="doc12-1" class="gallery" data-status-filter=".pagingInfo">
<div><img data-lazy="p/doc12/repros/doc12-1.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-2.jpg"></div>
<div><img data-lazy="p/doc12/repros/doc12-3.jpg"></div>
</figure>
<span class="pagingInfo"></span>
</div>
<div class="medium">
<figure id="doc11-1" class="gallery" data-status-filter=".pagingInfo2">
<div><img data-lazy="p/doc11/repros/doc11-1.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-2.jpg"></div>
<div><img data-lazy="p/doc11/repros/doc11-3.jpg"></div>
</figure>
<span class="pagingInfo2"></span>
</div>