两个div同时动画

时间:2016-02-19 16:17:40

标签: javascript jquery html css animation

我正在尝试在网页上创建一个简单的幻灯片放映类型功能。我创建了幻灯片放映,但当用户按下下一张幻灯片时,会遇到问题,将下一张幻灯片平滑过渡到帧中。按钮。这是我的代码



var $slideshow = $('#slideshow');
var sswidth = $slideshow.width();
var ssheight = $slideshow.height();
var currentslide = 0;
$('.slide').eq(currentslide).addClass('show');

$('.btnslideshow.right').click(function(){
  var left = $('.slide.show').offset().left;
	$('.slide.show').animate({'left': '+=' + sswidth + 'px'}, 'slow', function(){
  		$('.slide').eq(currentslide).removeClass('show');
      $('.slide').eq(currentslide).css({left: '0px'});
  		currentslide+=1;
      if (currentslide > $('.slide').length-1) currentslide = 0;
      $('.slide').eq(currentslide).addClass('show', 'slow');
  });
});

.background {
  background-color: lightgray;
  border-color: gray;
  border-style: solid;
  border-width: 1px 0 1px 0;
  width: 100%;
}
.btnslideshow {
  background: lightgray;
  height: 25px;
  position: relative;
  top: 77.5px;
  width: 25px;
  box-sizing: border-box;
  border-style:inset;
  z-index: 1;
}
.btnslideshow:hover {
  background: lightblue;
  border-style:outset;
}
  .btnslideshow.left {
    float: left;
    left: 7%;
    transform: rotate(180deg);
  }
  .btnslideshow.right {
    float:right;
    right: 7%;
  }
#nav {
  height: 25px;
  text-align: right;
}
.navHeader {
  border: none; 
  background-color: transparent;
  display: inline;
  font-size: 13px;
  font-variant: small-caps;
  font-weight: 600;
  padding-right: 20px;
}
.navHeader:nth-child(1) {
  margin-right:10px;
}
.navHeader:hover {
  font-size: 16px;
}
.show {
  display:inline-block !important;
}
#slideshow {
  background-color: white;
  border: 1px solid black;
  height:200px;
  margin-left: 12.5%;
  overflow:hidden;
  width:75%;
}
.slide {
  border:1px solid black;
  display: none;
  height:100%;
  position:relative;
  width:0px;
  z-index: 0;
}
.slide.show {
  width:100%;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="nav">
  <div class="navone">
    <button class="navHeader">
     About
    </button>
    <button class="navHeader">
     Contact
    </button>
  </div>
</div>
<div id="container">
  <div class="background">
    <img class="btnslideshow left" src="https://cdn3.iconfinder.com/data/icons/buttons/512/Icon_22-512.png">
    <img class="btnslideshow right" src="https://cdn3.iconfinder.com/data/icons/buttons/512/Icon_22-512.png">
    <div id="slideshow">
      <div class="slide">
        Test slide
      </div>
      <div class="slide">
        Test slide 22222
      </div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

正如您所看到的,我的幻灯片放映本质上是有效的,但过渡非常粗糙。我想要的是第一张幻灯片移出时第二张幻灯片进入框架,它们之间没有空格。我已经尝试在第一个动画的回调函数内的第二张幻灯片上设置动画,在第一个动画之外,以及其他东西,但我似乎无法得到它。

1 个答案:

答案 0 :(得分:2)

我在代码中做了很多更改。

我制作了#slideshow div position:relativeslide s position:abosulte。然后对js结构中的所有更改进行了一些修改,在animate函数中引入了queue:false等。

&#13;
&#13;
var $slideshow = $('#slideshow');
var sswidth = $slideshow.width();
var ssheight = $slideshow.height();
var currentslide = 0;
var duration = 1000;
$('.slide').eq(currentslide).addClass('show');
$('.slide').not('.show').css('left', -(sswidth+3) + 'px');
$('.btnslideshow.right').click(function() {
    var left = $('.slide.show').offset().left;
    $('.slide.show').animate({
        'left': sswidth + 'px'
    }, {
        duration: duration,
        queue: false,
        complete:function(){
          $(this).delay(20).css('left', -(sswidth+3) + 'px').removeClass('show');
        }
    });
    currentslide++;
    if (currentslide > $('.slide').length - 1) currentslide = 0;
    $('.slide').eq(currentslide).animate({
        left: '0px'
    }, {
        duration: duration,
        queue: false
    }).delay(duration).addClass('show');
});
&#13;
.background {
  background-color: lightgray;
  border-color: gray;
  border-style: solid;
  border-width: 1px 0 1px 0;
  width: 100%;
}
.btnslideshow {
  background: lightgray;
  height: 25px;
  position: relative;
  top: 77.5px;
  width: 25px;
  box-sizing: border-box;
  border-style: inset;
  z-index: 1;
}
.btnslideshow:hover {
  background: lightblue;
  border-style: outset;
}
.btnslideshow.left {
  float: left;
  left: 7%;
  transform: rotate(180deg);
}
.btnslideshow.right {
  float: right;
  right: 7%;
}
#nav {
  height: 25px;
  text-align: right;
}
.navHeader {
  border: none;
  background-color: transparent;
  display: inline;
  font-size: 13px;
  font-variant: small-caps;
  font-weight: 600;
  padding-right: 20px;
}
.navHeader:nth-child(1) {
  margin-right: 10px;
}
.navHeader:hover {
  font-size: 16px;
}
.show {
  display: inline-block !important;
}
#slideshow {
  background-color: white;
  border: 1px solid black;
  height: 200px;
  margin-left: 12.5%;
  overflow: hidden;
  width: 75%;
  position:relative;
}
.slide {
  border: 1px solid black;
  height: 100%;
  position: absolute;
  width: 100%;
  z-index: 0;
  display:none;
}
.slide.show {
  display:block;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="nav">
  <div class="navone">
    <button class="navHeader">
      About
    </button>
    <button class="navHeader">
      Contact
    </button>
  </div>
</div>
<div id="container">
  <div class="background">
    <img class="btnslideshow left" src="https://cdn3.iconfinder.com/data/icons/buttons/512/Icon_22-512.png">
    <img class="btnslideshow right" src="https://cdn3.iconfinder.com/data/icons/buttons/512/Icon_22-512.png">
    <div id="slideshow">
      <div class="slide">Test slide</div>
      <div class="slide">Test slide 22222</div>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;