簡體   English   中英

使用Javascript在兩個幻燈片之間切換

[英]Switching Between Two Slideshows with Javascript

我有一個帶有幻燈片的網頁。 幻燈片有三張圖片。 我想在頁面上有一個按鈕,該按鈕使用戶可以在此幻燈片演示與另一張帶有五張不同圖片的幻燈片之間進行切換。 如何使用JavaScript編程此按鈕,以及如何在HTML中添加第二個幻燈片?

當前HTML:

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

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

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

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

<div style="text-align:center">
  <span class="dot" onclick="currentSlide(1)"></span>
  <span class="dot" onclick="currentSlide(2)"></span>
  <span class="dot" onclick="currentSlide(3)"></span>
</div>
<button>Switch Slideshow</button>

當前的CSS:

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

/* Next & previous buttons */
.prev, .next {
  cursor: pointer;
  position: absolute;
  top: 50%;
  width: auto;
  margin-top: -22px;
  padding: 16px;
  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}
}

當前的JavaScript:

var slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex += n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}

function showSlides(n) {
  var i;
  var slides = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("dot");
  if (n > slides.length) {slideIndex = 1}
  if (n < 1) {slideIndex = 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[slideIndex-1].style.display = "block";
  dots[slideIndex-1].className += " active";
}

提前謝謝了!

在這里創建了pluker。 請參考以下鏈接。

https://plnkr.co/edit/xso6MfwOxQJ4PlDpW90y?p=preview

HTML
<div class="slideshow-container">
 <a class="prev" onclick="plusSlides(-1)">&#10094;</a>
 <a class="next" onclick="plusSlides(1)">&#10095;</a>
</div>
<br>

<div style="text-align:center">
 <span class="dot" onclick="currentSlide(1)"></span>
 <span class="dot" onclick="currentSlide(2)"></span>
 <span class="dot" onclick="currentSlide(3)"></span>
</div>
<button>Switch Slideshow</button>

JavaScript: 


var slideShowIndex = 1;
var slideShows= [
   [
        {

          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
        {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
        {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        }
    ],
    [
        {

          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
        {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
        {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
         {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        },
         {
          'image': 'img1.jpg',
          'caption': 'Caption Text'
        }
    ]
  ]

buildSlideShow();

var slideIndex = 1;
showSlides(slideIndex);

function plusSlides(n) {
  showSlides(slideIndex += n);
}

function currentSlide(n) {
  showSlides(slideIndex = n);
}


function showSlides(n) {
  var i;
  var slides = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("dot");
  if (n > slides.length) {slideIndex = 1}
  if (n < 1) {slideIndex = 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[slideIndex-1].style.display = "block";
  dots[slideIndex-1].className += " active";
}


function buildSlideShow(){
  var slideText = '';
  var slides = document.getElementsByClassName("slideshow-container");
  var slidesToRender = slideShows[slideShowIndex-1];
  slidesToRender.forEach(function(value,index){
    slideText += '<div class="mySlides fade"><div class="numbertext">'+ index+1+ '/'+slidesToRender.length + '</div><img src="'+value.image+'" style="width:100%"><div class="text">'+value.caption+'</div></div>';
  });
  slides[0].innerHtml = slideText;

}

希望這對您有用。

好吧,您首先需要能夠動態創建幻燈片。 只有這樣,您才能交換不同的幻燈片。 我試圖不重構您現有的代碼。 另外,我沒有使用jQuery(我會親自使用)。 只需為每個幻燈片生成標記並將其設置在幻燈片div上即可。 我必須創建一個內部div,以免按鈕被覆蓋。

 var slideshowIndex = 1; var slideIndex = 1; var slideshows = [ [ 'http://placehold.it/500x300/f00/0ff?text=Foo', 'http://placehold.it/500x300/0f0/f0f?text=Bar', 'http://placehold.it/500x300/00f/ff0?text=Baz' ], [ 'http://placehold.it/500x300/f70/07f?text=Fizz', 'http://placehold.it/500x300/0f7/f07?text=Buzz', 'http://placehold.it/500x300/70f/7f0?text=Bang' ] ]; var buttonTextArr = [ 'Show Images', 'Show Pages' ]; function createSlides(slides) { return slides.map(function(slide, index) { return [ '<div class="mySlides fade">', '<div class="numbertext">' + (index + 1) + ' / ' + slides.length + '</div>', '<img src="' + slide + '">', '<div class="text">Caption #' + (index + 1) + '</div>', '</div>' ].join(''); }).join(''); } function createDots(slides) { return slides.map(function(slide, index) { return '<span class="dot" onclick="currentSlide(' + (index + 1) + ')"></span>' }).join(''); } function loadSlideshow(slides) { document.getElementsByClassName('slideshow-slides')[0].innerHTML = createSlides(slides); document.getElementsByClassName('dots')[0].innerHTML = createDots(slides); } function loadNextSlideshow() { slideshowIndex = (slideshowIndex + 1) % 2; loadSlideshow(slideshows[slideshowIndex]); slideIndex = 1; // Reset index showSlides(slideIndex); document.getElementsByClassName('switch')[0].innerHTML = buttonTextArr[slideshowIndex]; } loadNextSlideshow(); // Load the slideshow function plusSlides(n) { showSlides(slideIndex += n); } function currentSlide(n) { showSlides(slideIndex = n); } function showSlides(n) { var i; var slides = document.getElementsByClassName("mySlides"); var dots = document.getElementsByClassName("dot"); if (n > slides.length) { slideIndex = 1 } if (n < 1) { slideIndex = 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[slideIndex - 1].style.display = "block"; dots[slideIndex - 1].className += " active"; } 
 /* Slideshow container */ .slideshow-container { max-width: 1000px; position: relative; margin: auto; } /* Next & previous buttons */ .prev, .next { cursor: pointer; position: absolute; top: 50%; width: auto; margin-top: -22px; padding: 16px; color: white; font-weight: bold; font-size: 18px; transition: 0.6s ease; border-radius: 0 3px 3px 0; text-shadow: 0.05em 0.05em 0.25em #000; } /* 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: 0.4 } to { opacity: 1 } } @keyframes fade { from { opacity: 0.4 } to { opacity: 1 } } 
 <div class="slideshow-container"> <div class="slideshow-slides"></div> <a class="prev" onClick="plusSlides(-1)">&#10094;</a> <a class="next" onClick="plusSlides(1)">&#10095;</a> </div> <br /> <div class="dots" style="text-align:center"></div> <button class="switch" onClick="loadNextSlideshow()">Switch Slideshow</button> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM