使用动画

时间:2015-08-02 07:43:25

标签: html css animation

我想知道是否可以附加元素并轻轻推动其他元素远离它。

以下是我的示例CodePen



/*
var i = 0;
var timerId = setInterval(function(){
  $("ul").append("<li></li> ");
    i++;
    if(i >= 3) {
      clearInterval(timerId);
    }  
},800);
*/

$("button").on("click", function() {
  $("ul").append("<li></li> ");
});
&#13;
button {
  display: block;
  margin: 0 auto;
  cursor: pointer;
  border: none;
  width: 150px;
  height: 40px;
  border-radius: 5px;
}

ul {
  display: block;
  list-style: none;
  padding: 10px;
  margin: 0;
  text-align: center;
}

li {
  display: inline-block;
  width: 50px;
  height: 50px;
  background: rgba(25, 160, 255, 1);
  border: 3px solid black;
  border-radius: 15px;
  cursor: pointer;
  margin: 0 3px;
  
  transition: all 0.2s ease-in-out;
  transform-orgin: center;
  animation-name: popin;
	animation-duration: 0.3s;
	animation-timing-function: easeout;
  
}

li:hover{
  transform: scale(1.2);
}


@keyframes popin {
  0% {
    transform: scale(0.2);
    background: rgba(25, 160, 255, 0);
  }
  75% {
    transform: scale(1.2);
    background: rgba(25, 160, 255, 1);
    animation-timing-function: easeout;
  }
  100% {
    transform: scale(1);
    background: rgba(25, 160, 255, 1);
  }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button>Add More</button>
<ul>
  <li></li>
  <li></li>
  <li></li>
</ul>
&#13;
&#13;
&#13;

您可以看到现有元素立即被推开,有没有办法为这个位置变化设置动画?

1 个答案:

答案 0 :(得分:1)

Sure there is。通常,您只需要在添加元素时隐藏元素,然后延迟显示元素,JQuery非常擅长。像这样的东西。

$n = $("<li></li>").hide();
$("ul").append($n);
$n.show(300); // 300 being the number of milliseconds to take to get to full opacity

嗯,那是你通常做的事情。但是,由于您已经为transition元素添加了li属性,因此会出于某种不明原因覆盖JQuery的动画,从而停止缓慢的添加效果。
对此的解决方案非常简单,使用属性

创建一个新的CSS类
transition: intial;

并将其添加到所有新创建的li中,以便加载项效果生效,然后将其删除以添加恢复悬停功能。

Complete CodePen

编辑:另一个CodePen带有(略微)更好的逐步进入动画。在CSS中投入更多精力可以产生更好的效果,甚至可以使用JQueryUI。