jQuery SlideIn动画到Angular中的CSS动画

时间:2016-01-20 14:03:20

标签: jquery css animation css-animations

昨天我尝试在CSS动画中创建三个重叠div的幻灯片效果但是失败了。尽管angular提供了额外的类,但我无法实现平滑过渡。

我想在这里看到(通过jQuery解决):http://codepen.io/anon/pen/mVpyvB

Animation I try to create in CSS

我对css动画的问题是,要么很快就会删除底层div(从div1过渡到div2),或者最后隐藏底层div时会有一个小的闪烁效果。

那么从这些jQuery语句转移到CSS Animation的正确方法是什么?

$('#show2').click(function(){
  $('.second').animate({
    'margin-left': '0px'
  }, 1000, function() {
    // Animation complete.
    $('.first').removeClass('visible');
    $('.second').addClass('visible');
  });
});

$('#hide2').click(function(){
  $('.first').addClass('visible');
  $('.second').removeClass('visible');
  $('.second').animate({'margin-left': '350px'}, 1000);
});

1 个答案:

答案 0 :(得分:0)

因为你还没有包含你的CSS,所以我做了一个猜测并构建了我自己的版本,看看下面是否以任何方式帮助你。 JS只是添加和删除类,如果你愿意,可以用jQuery代替,但它相当简单。



var c = document.getElementById('container');
var cd = Array.prototype.slice.call(c.querySelectorAll('div'));

// Make each #d activate the next one (where available)
cd.forEach(function(e, i){
    // Check each for a close anchor
    var a = e.querySelector('a');
    if(a) a.addEventListener('click', function(event){
        event.preventDefault();
        event.stopImmediatePropagation();
        cd[i].className = '';
    })
    // Check if there is a next element to activate
    if(cd[i + 1]) e.addEventListener('click', function(event){
        event.preventDefault();
        event.stopImmediatePropagation();
        cd[i + 1].className = 'active';
    })
});

// Make Container Click active #d1
c.addEventListener('click', function(event){
    event.preventDefault();
    event.stopImmediatePropagation();
    cd[0].className = 'active';
})

body, html {
  height: 100%;
}
#container {
  width: 100%;
  position: relative;
  height: 100%;
  background: gray;
  overflow: hidden;
}
#container > div {
  width: 80%;
  height: 100%;
  position: absolute;
  left: 100%;
  top: 0;
  /* This would be all you need */
  -webkit-transition: left 400ms;
  transition: left 400ms;
}
/* And this, of course. */
#container > div.active {
  left: 20%;
}
#d1 { background: yellow; }
#d2 { background: red; }
#d3 { background: green; }

<div id="container">
  <div id='d1'>First <a href="#">Close</a></div>
  <div id='d2'>Second <a href="#">Close</a></div>
  <div id='d3'>Third <a href="#">Close</a></div>
</div>
&#13;
&#13;
&#13;