玩索引的哈巴狗

PUG playing with index

在使用 SO 并找到很多答案来满足我的学习过程之后,是时候让我(因为我还没有找到我的问题的任何答案)寻求您的帮助。 几天以来我一直在学习 PUG,我正在尝试使用 "each" 迭代来创建一个 html/css 幻灯片(在(该死的项目之后,再也找不到 git ,太多基于此的项目))。 对不起。 这是我制作的哈巴狗代码:

.slideshow
  each val, index in ['img-1.jpg', 'img-2.jpg', 'img-3.jpg']
    input(type="radio" name="ss" id='ss-img-' + index).ss-bullet
    .ss-img
      img(src=val)
      label(for='ss-img-' + *index*).ss-nav-prev Image précédente
      label(for='ss-img-' + *index*).ss-nav-next Image suivante

(.类 仅用于 buttons/bullets)

的后期样式

这就是我想要获得的,html:

<div class="slideshow">
      <input class="ss-bullet" type="radio" name="ss" id="ss-img-0">
      <div class="ss-img"><img src="img/img-1.jpg">
        <label class="ss-nav-prev" for="ss-img-2">Image précédente</label>
        <label class="ss-nav-next" for="ss-img-1">Image suivante</label>
      </div>
      <input class="ss-bullet" type="radio" name="ss" id="ss-img-1">
      <div class="ss-img"><img src="img/img-2.jpg">
        <label class="ss-nav-prev" for="ss-img-0">Image précédente</label>
        <label class="ss-nav-next" for="ss-img-2">Image suivante</label>
      </div>
      <input class="ss-bullet" type="radio" name="ss" id="ss-img-2">
      <div class="ss-img"><img src="img/img-3.jpg">
        <label class="ss-nav-prev" for="ss-img-1">Image précédente</label>
        <label class="ss-nav-next" for="ss-img-0">Image suivante</label>
      </div>
    </div>

当然你们都注意到了,缺失的部分在 index:

label(for='ss-img-' + *index*)

部分。

有人可以教我如何迭代索引来完成这个吗? (您可能注意到的另一件事是我对 javascript 和法语还是陌生的) 谢谢!

因此,您需要的是一些简单的循环(环绕)算法(另请参阅 this SO question 的答案):

- var arrayLength = 3;
label(for='ss-img-' + ((index + arrayLength - 1) % arrayLength)).ss-nav-prev Image précédente
label(for='ss-img-' + ((index + 1) % arrayLength)).ss-nav-next Image suivante

添加您的代码后:

.slideshow
  each val, index in ['img-1.jpg', 'img-2.jpg', 'img-3.jpg']
    input(type="radio" name="ss" id='ss-img-' + index)
    .ss-img
      img(src=val)
      label(for='ss-img-' + ((index + val.length - 1) % val.length)) Image précédente
      label(for='ss-img-' + ((index + 1) % val.length)) Image suivante

我明白了:

<div class="slideshow">
      <input type="radio" name="ss" id="ss-img-0">
      <div class="ss-img"><img src="img-1.jpg">
        <label for="ss-img-8">Image précédente</label>
        <label for="ss-img-1">Image suivante</label>
      </div>
      <input type="radio" name="ss" id="ss-img-1">
      <div class="ss-img"><img src="img-2.jpg">
        <label for="ss-img-0">Image précédente</label>
        <label for="ss-img-2">Image suivante</label>
      </div>
      <input type="radio" name="ss" id="ss-img-2">
      <div class="ss-img"><img src="img-3.jpg">
        <label for="ss-img-1">Image précédente</label>
        <label for="ss-img-3">Image suivante</label>
      </div>
    </div>

(删除了 类 以使其更清楚) 如您所见,第一项和最后一项尚未按预期循环。只有中间那个是对的。 (很抱歉使用 'answer' 而不是 'comment',我还没有找到编写多行代码的方法...) 再次感谢您的帮助!

这是供想要使用它的人使用的最终 pug 代码:

.slideshow
  - var imgs = ['img/img-1.jpg', 'img/img-2.jpg', 'img/img-3.jpg', 'img/img-4.jpg', 'img/img-5.jpg', 'img/img-6.jpg']
  each img, index in imgs
    input(type="radio" name="ss" id=('ss-img-' + index) checked=(index === 0)).ss-bullet
    .ss-img
      img(src=img)
      label(for='ss-img-' + ((index + imgs.length - 1) % imgs.length)).ss-nav-prev Image précédente
      label(for='ss-img-' + ((index + 1) % imgs.length)).ss-nav-next Image suivante