使用Javascript在两个幻灯片之间切换 [英] Switching Between Two Slideshows with Javascript

查看:118
本文介绍了使用Javascript在两个幻灯片之间切换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带幻灯片的网页。幻灯片有三张照片。我想在页面上有一个按钮,使用户可以在五种不同的图片之间切换此幻灯片和另一个。如何使用JavaScript编程此按钮,以及我将在HTML中添加第二个幻灯片?



当前HTML:

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

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

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

< a class =prevonclick =plusSlides(-1)>&#10094;< / a>
< a class =nextonclick =plusSlides(1)>&#10095;< / a>
< / div>
< br>

< div style =text-align:center>
< span class =dotonclick =currentSlide(1)>< / span>
< span class =dotonclick =currentSlide(2)>< / span>
< span class =dotonclick =currentSlide(3)>< / span>
< / div>
<按钮>切换幻灯片< /按钮>

目前的CSS:

  / *幻灯片容器* / 
.slideshow-container {
max-width:1000px;
职位:亲属;
margin:auto;
}

/ *下一个&以前的按钮* /
.prev,.next {
cursor:pointer;
位置:绝对;
top:50%;
width:auto;
margin-top:-22px;
padding:16px;
颜色:白色;
font-weight:bold;
font-size:18px;
过渡:0.6s缓解;
border-radius:0 3px 3px 0;
}

/ *将下一个按钮置于右边* /
.next {
right:0;
border-radius:3px 0 0 3px;
}

/ *在悬停时,添加一点透明的黑色背景色* /
.prev:hover,.next:hover {
background-color:rgba(0,0,0,0.8);
}

/ *标题文字* /
.text {
color:#f2f2f2;
font-size:15px;
padding:8px 12px;
位置:绝对;
bottom:8px;
宽度:100%;
text-align:center;
}

/ *数字文字(1/3等)* /
.numbertext {
color:#f2f2f2;
font-size:12px;
padding:8px 12px;
位置:绝对;
top:0;


/ dots / bullets / indicators * /
.dot {
cursor:pointer;
height:13px;
width:13px;
margin:0 2px;
background-color:#bbb;
border-radius:50%;
display:inline-block;
转换:背景色0.6s易用性;
}

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

/ *淡入淡出的动画* /
。淡入淡出{
-webkit-animation-name:fade;
-webkit-animation-duration:1.5s;
animation-name:fade;
动画持续时间:1.5s;
}

@ -webkit-keyframes淡入淡出{b $ b from {opacity:.4}
to {opacity:1}
}

@keyframes淡入淡出{b $ {from {opacity:.4}
to {opacity:1}
}

当前的JavaScript:

  var slideIndex = 1; 
showSlides(slideIndex);

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

函数currentSlide(n){
showSlides(slideIndex = n);
}

function showSlides(n){
var i;
var slides = document.getElementsByClassName(mySlides);
var dots = document.getElementsByClassName(dot);如果(n> slides.length){slideIndex = 1}
if(n <1){slideIndex = slides.length}
(i = 0; i<幻灯片.length; i ++){
slides [i] .style.display =none; (i = 0; i dots [i] .className = dots [i] .className.replace(active,b
$ b );
}
幻灯片[slideIndex-1] .style.display =block;
dots [slideIndex-1] .className + =active;
}

非常感谢!

解决方案

好的,你需要首先能够动态地创建幻灯片。只有这样你才能够进出不同的幻灯片。我试图不重构你现有的代码。另外,我没有使用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 = ['显示图像','显示页面'];函数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>] .join(' ); })。join('');} function createDots(slides){return slides.map(function(slide,index){return'< span class =dotonclick =currentSlide('+(index + 1) ('幻灯片')[0] .innerHTML = createSlides(幻灯片);}';');< / span>'})。 document.getElementsByClassName('dots')[0] .innerHTML = createDots(slides);} function loadNextSlideshow(){slideshowIndex =(slideshowIndex + 1)%2; loadSlideshow(幻灯片[slideshowIndex]); slideIndex = 1; //重置索引showSlides(slideIndex); document.getElementsByClassName('switch')[0] .innerHTML = buttonTextArr [slideshowIndex];} loadNextSlideshow(); //载入幻灯片函数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

/ *幻灯片容器* /。幻灯片容器{max-width:1000px;位置:相对; margin:auto;} / * Next&上一个按钮* /。prev,.next {cursor:pointer;位置:绝对;顶部:50%;宽度:自动; margin-top:-22px;填充:16px;白颜色; font-weight:bold; font-size:18px;过渡:0.6s缓解; border-radius:0 3px 3px 0; text-shadow:0.05em 0.05em 0.25em#000;} / *将下一个按钮置于右边* /。next {right:0; border-radius:3px 0 0 3px;} / *在悬停时,添加一点点透视的黑色背景* /。prev:hover,.next:hover {background-color:rgba(0,0,0 ,0.8);} / *标题文本* /。text {color:#f2f2f2; font-size:15px; padding:8px 12px;位置:绝对;底部:8px;宽度:100%; text-align:center;} / *数字文本(1/3等)* /。numbertext {color:#f2f2f2; font-size:12px; padding:8px 12px;位置:绝对;顶部:0;} / *点/项目符号/指标* /。点{cursor:pointer;身高:13px;宽度:13px; margin:0 2px; background-color:#bbb;边界半径:50%;显示:inline-block; transition:background-color 0.6s ease;}。active,.dot:hover {background-color:#717171;} / *淡入淡出的动画* /。fade {-webkit-animation-name:fade; -webkit-animation-duration:1.5s;动画名称:淡入淡出;动画持续时间:1.5s;} @ - webkit-keyframes淡出{从{opacity:0.4}到{opacity:1}} @ keyframes淡出{从{opacity:0.4}到{opacity:1}}


I have a web page with a slideshow. The slideshow has three pictures. I would like to have a button on the page which enables users to switch between this slideshow and another with five different pictures. How would I program this button with JavaScript and where would I add the second slideshow in the HTML?

Current 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>

Current 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}
}

Current 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";
}

Many thanks in advance!

解决方案

Well, you need to first be able to create your slideshow dynamically. Only then will you be able to swap in-and-out different slides. I tried not to refactor your existing code. Also, I did not use jQuery (which I would use personally). Just generate the markup for each slide and set it on the slides div. I had to create an inner div so that the buttons do not get overridden.

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>

这篇关于使用Javascript在两个幻灯片之间切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆