【问题标题】:How do I make multiple slideshows in the same html document?如何在同一个 html 文档中制作多个幻灯片?
【发布时间】:2017-04-09 06:12:17
【问题描述】:

我在这里使用 w3schools 示例:https://www.w3schools.com/howto/howto_js_slideshow.asp,但是当我尝试添加第二个幻灯片时,它不会出现,直到我浏览第一个。即一次只打开一个幻灯片。如何让多个幻灯片(至少 4 个)同时可见和可用?

【问题讨论】:

  • 你是否使用不同的 CSS class 名称用于第二、第三和第四个 sildeshow?
  • 我现在正在使用 W. Scott 在下面的答案中提供的示例,我想知道您是否知道如何使用 CSS 将不同幻灯片的位置设置为彼此分开。我计划将每个幻灯片放在屏幕右侧的另一个下方。

标签: javascript html css slideshow


【解决方案1】:

为每个幻灯片容器分配一个 ID,并将其提供给所有幻灯片功能。此外,使用相同的对象来跟踪当前的幻灯片索引。

var slideshow1 = document.getElementById("slideshow1");
slideshow1.currentSlideIndex = 1;
showSlides(slideshow1.currentSlideIndex, slideshow1);

var slideshow2 = document.getElementById("slideshow2");
slideshow2.currentSlideIndex = 1;
showSlides(slideshow2.currentSlideIndex, slideshow2);


function plusSlides(n, slideshow) {
  showSlides(slideshow.currentSlideIndex += n, slideshow);
}

function currentSlide(n, slideshow) {
  showSlides(slideshow.currentSlideIndex = n, slideshow);
}

function showSlides(n, slideshow) {
  


  var i;
  var slides = slideshow.getElementsByClassName("mySlides");
  var dots = slideshow.getElementsByClassName("dot");
  if (n > slides.length) {slideshow.currentSlideIndex = 1}    
  if (n < 1) {slideshow.currentSlideIndex = slides.length}
  for (i = 0; i < slides.length; i++) {
      slides[i].style.display = "none";  
  }
  for (i = 0; i < dots.length; i++) {
      dots[i].className = dots[i].className.replace(" active", "");
  }
  slides[slideshow.currentSlideIndex-1].style.display = "block";  
  dots[slideshow.currentSlideIndex-1].className += " active";
}
* {box-sizing:border-box}
body {font-family: Verdana,sans-serif;margin:0}
.mySlides {display:none}

/* Slideshow container */
.slideshow-container {
  max-width: 1000px;
  position: relative;
  margin: auto;
}

/* Next & previous buttons */
.prev, .next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  padding: 16px;
  margin-top: -22px;
  color: white;
  font-weight: bold;
  font-size: 18px;
  transition: 0.6s ease;
  border-radius: 0 3px 3px 0;
}

/* Position the "next button" to the right */
.next {
  right: 0;
  border-radius: 3px 0 0 3px;
}

/* On hover, add a black background color with a little bit see-through */
.prev:hover, .next:hover {
  background-color: rgba(0,0,0,0.8);
}

/* Caption text */
.text {
  color: #f2f2f2;
  font-size: 15px;
  padding: 8px 12px;
  position: absolute;
  bottom: 8px;
  width: 100%;
  text-align: center;
}

/* Number text (1/3 etc) */
.numbertext {
  color: #f2f2f2;
  font-size: 12px;
  padding: 8px 12px;
  position: absolute;
  top: 0;
}

/* The dots/bullets/indicators */
.dot {
  cursor:pointer;
  height: 13px;
  width: 13px;
  margin: 0 2px;
  background-color: #bbb;
  border-radius: 50%;
  display: inline-block;
  transition: background-color 0.6s ease;
}

.active, .dot:hover {
  background-color: #717171;
}

/* Fading animation */
.fade {
  -webkit-animation-name: fade;
  -webkit-animation-duration: 1.5s;
  animation-name: fade;
  animation-duration: 1.5s;
}

@-webkit-keyframes fade {
  from {opacity: .4} 
  to {opacity: 1}
}

@keyframes fade {
  from {opacity: .4} 
  to {opacity: 1}
}

/* On smaller screens, decrease text size */
@media only screen and (max-width: 300px) {
  .prev, .next,.text {font-size: 11px}
}
<div id="slideshow1" class="slideshow-container">

<div class="mySlides fade">
  <div class="numbertext">1 / 3</div>
  <img src="img_nature_wide.jpg" style="width:100%">
  <div class="text">Caption Text</div>
</div>

<div class="mySlides fade">
  <div class="numbertext">2 / 3</div>
  <img src="img_fjords_wide.jpg" style="width:100%">
  <div class="text">Caption Two</div>
</div>

<div class="mySlides fade">
  <div class="numbertext">3 / 3</div>
  <img src="img_mountains_wide.jpg" style="width:100%">
  <div class="text">Caption Three</div>
</div>

<a class="prev" onclick="plusSlides(-1,slideshow1)">&#10094;</a>
<a class="next" onclick="plusSlides(1, slideshow1)">&#10095;</a>


<div style="text-align:center">
  <span class="dot" onclick="currentSlide(1, slideshow1)"></span> 
  <span class="dot" onclick="currentSlide(2, slideshow1)"></span> 
  <span class="dot" onclick="currentSlide(3, slideshow1)"></span> 
</div>
</div>
<br>





<div id="slideshow2" class="slideshow-container">

<div class="mySlides fade">
  <div class="numbertext">1 / 3</div>
  <img src="img_nature_wide.jpg" style="width:100%">
  <div class="text">Caption Text</div>
</div>

<div class="mySlides fade">
  <div class="numbertext">2 / 3</div>
  <img src="img_fjords_wide.jpg" style="width:100%">
  <div class="text">Caption Two</div>
</div>

<div class="mySlides fade">
  <div class="numbertext">3 / 3</div>
  <img src="img_mountains_wide.jpg" style="width:100%">
  <div class="text">Caption Three</div>
</div>

<a class="prev" onclick="plusSlides(-1, this.parentNode)">&#10094;</a>
<a class="next" onclick="plusSlides(1, this.parentNode)">&#10095;</a>


<div style="text-align:center">
  <span class="dot" onclick="currentSlide(1, slideshow2)"></span> 
  <span class="dot" onclick="currentSlide(2, slideshow2)"></span> 
  <span class="dot" onclick="currentSlide(3, slideshow2)"></span> 
</div>
</div>
<br>

【讨论】:

  • 这可行,但我想使用 CSS 设置幻灯片的位置,我该怎么做?
  • 请将我的解决方案作为答案。此外,您可以在样式表中使用 #slideshow1 { //ENTER STYLE HERE } 或 #slideshow2 { //ENTER STYLE HERE } 为每个幻灯片设置独立样式。
猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 2022-01-16
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多