javascript - 带有 z-Index : Glitch on last Slide 的纯 JS + CSS 幻灯片

标签 javascript css z-index slideshow transition

我尝试用 JS + CSS 构建一个幻灯片,除了一个视觉问题之外,它运行得很好。到最后一张幻灯片的过渡似乎不知何故被破坏了。

但是我不知道问题出在哪里。如果我注释掉最后一张幻灯片上的“偏移”过渡,则不会发生错误。

这就是我所说的可待因:https://codepen.io/marianbreitmeyer/pen/paeYgZ

我提到的代码块是这个:

const showNext = function() {
    clicked = true;
    for (i = 0; i <= slides.length-1; i++) {
        if( parseInt(slides[i].style.zIndex) === slides.length) {
            console.log(slides[i].innerHTML);
            triggerAnimation(slides[i], 'offcanvas');
        } else if (parseInt(slides[i].style.zIndex) === slides.length-1) {
            //the line below triggers the problem
            triggerAnimation(slides[i], 'offset');       
        }
    }
};

也许有更多经验的人可以帮助我:)

最佳答案

您的代码可能更简单:

const btn = document.getElementsByClassName('arrow')[0];
const slides = document.getElementsByClassName('slide');

slides[slides.length - 1].classList.add('offset', 'next');

btn.addEventListener("click", function(e) {
  var o, n;
  for (var i = 0; i < slides.length; i++) {
    if (slides[i].classList.contains('offset')) {
      slides[i].classList.remove('offset', 'next')
      slides[i].classList.add('offcanvas');
      o = (slides[i - 1] || slides[slides.length - 1]);
      n = (slides[i - 2] || slides[slides.length + i - 2]);
    }
    if (slides[i].offsetLeft < -slides[i].offsetWidth) {
      slides[i].classList.remove('offcanvas', 'next');
    }
  }
  o.classList.add('offset');
  n.classList.add('next');
}, false);
.container {
  width: 100%;
  height: 100vh;
  background: brown;
  position: relative;
}

body {
  text-align: center;
  font-size: 2rem;
}

.slide {
  position: absolute;
  top: 0;
  left: 90%;
  width: 100%;
  height: 100%;
}

.slide:nth-child(1) {
  background: pink;
}

.slide:nth-child(2) {
  background: blue;
}

.slide:nth-child(3) {
  background: green;
}

.slide:nth-child(4) {
  background: grey;
}

.slide:nth-child(5) {
  background: yellow;
}

.slide.next {z-index:1}

.slide.offset {
  left: -10%;
  z-index: 2;
  transition: left .65s ease-in-out;
}

.slide.offcanvas {
  left: -110%;
  z-index: 2;
  transition: left .65s ease-in-out;
}

.arrow {
  position: absolute;
  right: 5%;
  top: 25px;
  z-index: 9;
  height: 50px;
  width: 50px;
  cursor: pointer;
}

.arrow:hover path {
  transform: translate(16px, 0px);
}

path {
  position: absolute;
  top: 0;
  left: 0;
  transition: all .2s ease-in-out;
}
<div class="container">

  <div class="slide">1 = pink</div>
  <div class="slide">2 = blue</div>
  <div class="slide">3 = green</div>
  <div class="slide">4 = grey</div>
  <div class="slide">5 = yellow</div>

  <svg xmlns="http://www.w3.org/2000/svg" class="arrow"><path d="M19.443 5.17L30.138 15.5H-.095v1h30.233L19.443 26.829l.696.719L32.095 16 20.139 4.451z"/></svg>

</div>

关于javascript - 带有 z-Index : Glitch on last Slide 的纯 JS + CSS 幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48726638/

相关文章:

html - 嵌套 UL 中的 Z 索引

html - Z-index 下拉菜单问题

JavaScript 数组 ["index"].push() 不起作用

javascript - 数据表和 sScrollY、自动调整大小

javascript - `document.elementFromPoint` 的 puppeteer api 是什么?

html - 当折叠的元素很长时 Accordion 跳跃

css - 垂直居中背景图像

javascript - 如何在 react-native-paper 的 Appbar.Header 中将标题居中?

javascript - 为什么我的 javascript 呈现的导航栏没有被抓取?

javascript - z-index 属性未被检索,而其他属性正在被相同的辅助函数检索